あけましておめでとうございます。
毎年、適当な言語を選んで、あけましておめでとうメールを送っています。
今年は、groovyにしてみました。
Environment
- CentOS Linux release 7.2.1511 (Core) x86_64
- Groovy Version: 2.4.7 JVM: 1.8.0_111 Vendor: Oracle Corporation OS: Linux
- javax.mail-1.5.6.jar
Install
sdkmanでgroovyを入れるだけ。$HOME/.sdkman 以下に色々と。
$ curl -s "https://get.sdkman.io" | bash
$ source ~/.sdkman/bin/sdkman-init.sh
$ sdk install groovy
メール送信はjavax.mail
を使うので、.sdkman以下に放り込んでおく。
$ cd ~/.sdkman/candidates/groovy/2.4.7/lib/
$ curl -O https://maven.java.net/content/repositories/releases/com/sun/mail/javax.mail/1.5.6/javax.mail-1.5.6.jar
Code
1時間ぐらいでチュートリアルみて、ネットで検索したのを切り貼りして書いたけど、groovyっぽいコードなのかは、まだ判別できるほど目が肥えてない。
Javaとruby知っていれば、すんなりかけそうな文法だから、結構楽しい。
import javax.mail.*
import javax.mail.internet.*
def simpleMail(data) {
Properties props = System.getProperties();
props.put("mail.smtp.auth", true);
props.put("mail.smtp.host", data.host);
props.put("mail.smtp.user", data.user);
props.put("mail.smtp.password", data.pass);
props.put("mail.smtp.port", "587");
Session session = Session.getDefaultInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(data.from));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(data.to));
msg.setSubject(data.subject, "iso-2022-jp");
msg.setText(data.body, "iso-2022-jp", "plain");
Transport transport = session.getTransport("smtp");
transport.connect(data.host, data.user, data.pass);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
}
def generateMailData(name, to)
{
def body = """$nameさん
2017年01月01日になりました。
あけましておめでとうございます。
"""
def data = [
host : "smtp.example.co.jp",
user : "user",
pass : "userpass",
to : to,
from : "dharry@example.co.jp",
subject : "I wish you a Happy new year 2017!",
body : body,
]
return data
}
def map = [
"bressler@example.co.jp" : "bressler",
"scorpio@example.co.jp" : "scorpio",
"chico@example.co.jp" : "chico",
]
map.each {to, name ->
def data = generateMailData(name, to)
println "$name -> $to"
simpleMail(data);
}