Posted at

Groovyであけましておめでとうございます!

More than 1 year has passed since last update.

あけましておめでとうございます。

毎年、適当な言語を選んで、あけましておめでとうメールを送っています。

今年は、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);

}