Groovy から e-mail を送信するには? [groovy]
Sh*tmores: Missing Groovy Recipe: Send e-mail from Groovy で紹介されているように AntBuilder を使うと簡単にできる。
上記 blog でのコメント欄にもあるけれどgrails を使っている場合は AntBuilder ではなく Grails - Mail Plugin を使った方が容易だろう。
シェルスクリプトを書く代わりに Groovy で簡単なツールを書く者にとっては Grails のプラグインでない AntBuilder の方が使い安い。
ただ、幾つかライブラリを用意する必要がある。ライブラリを CLASSPATH に設定しないと
[mail] Failed to initialise MIME mail: org.apache.tools.ant.taskdefs.email.MimeMailer
と表示されてメールを送れない。ライブラリは次の場所から入手できる。
- http://java.sun.com/products/javamail/index.jsp
- http://java.sun.com/javase/technologies/desktop/javabeans/glasgow/jaf.html
- http://ant.apache.org/bindownload.cgi
それぞれ、JavaMail と JavaBeans(TM) Activation Framework、Apache Ant である。
ソースコードを UTF-8 で書いていて、メールの本文も UTF-8 にしたいのなら charset を指定すればよい。以下サンプル。
param1 = "だよね orz.."
ant = new AntBuilder()
ant.mail(mailhost:'mail.example.com', mailport:'25', subject:'日本語のテスト', charset:'utf-8'){
from(address:'experiment@example.com')
replyto(address:'experiment@example.com')
to(address:'experiment@example.com')
message(
"""日本語のテスト
ヒアドキュメント便利 ${param1}
""")
}
Groovy だから ${変数名} で変数を差し込めるし、ヒアドキュメントも使える。先に紹介した blog ではファイルの添付方法も紹介している。
最終的に、ソースコードを UTF-8 で mail.groovy にしたなら、
groovy -c utf-8 -cp "I:\lib\activation.jar;I:\lib\mailapi.jar;I:\lib\smtp.jar;I:\lib\ant-javamail.jar" mail.groovy
でとすれば良い(各種ライブラリのパスは各自で適切に変えて頂きたい)。
メールサーバの認証方法はいろいろあるが、POP before SMTP だと、上記のスクリプトのままでは POP してくれないので、認証に失敗してメール送信できない。その場合は、POP してメールを受信(受信せず、メールがあるかないか調べるだけでも可)するコードを書くか、Thunderbird などで一旦、受信しておいて、そのアカウントを用いてメール送信すれば良い。少なくとも so-net は可能だった。
Ant の Mail タスクのマニュアルは Mail Task にある。このマニュアルは XML ファイルとして設定をどのように記述するか述べたものだから、Groovy で実装する場合は注意されたい。
筆者の場合 charset:'utf-8' と書くべきところを charset='utf-8' と書いて、
Caught: The <mail> type doesn't support nested text data ("utf-8").
と表示されて何が悪いか直ぐ分からなかったので...
参考文献