SSブログ

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

と表示されてメールを送れない。ライブラリは次の場所から入手できる。

それぞれ、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").

と表示されて何が悪いか直ぐ分からなかったので...

参考文献


タグ:Mail Groovy

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。