LoginSignup
2
2

More than 5 years have passed since last update.

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

Posted at

あけましておめでとうございます。
毎年、適当な言語を選んで、あけましておめでとうメールを送っています。
今年は、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);

}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2