Grailsで簡単にメールを送信するにはどうすればいいでしょう。普通にJavaMailをライブラリに入れてAPIをそのまま呼ぶのが手っ取り早いか。
特に日本語では文字コードの問題があるので用心深くなるのですが、せっかくならGroovyらしいやり方で書きたいものです。
今後のことを考えるとなるべく最新の方法で実装したいと思います。その考えでいくとGrails公式サイトのプラグインとして登録されているmailプラグインが無難だと思うのが普通。
でもこれをGrails1.3.5でインストールするとエラーが出てしまいインストールできないです。
なにやら「mail-1.4.1.jar」がないと怒られる。どうやらmavenリポジトリには1.4.1は無くなっている模様。
仕方が無いのでググって対応を探してみる。
今のところ1.4.1が http://www.oracle.com/technetwork/java/javamail-1-4-1-141959.html
からダウンロードできるので「mail-1.4.1.jar」という名前で %grails_home%/lib にコピーして対処できました。
そのあとGrailsを1.3.6にアップグレード、mailプラグインインストールをしてみたらエラーは出ません。仕組みがわからなくなってしまったけど進めます。(よくみれば依存プラグインであるgreenmail-1.2.2/lib/にmail-1.4.1.jarが入っていますね)
日本語に関する設定をしてみましょう。
と思ったのですが、このmailプラグインには件名、本文にISO-2022-JP(JIS漢字)を指定する事ができないようです。 Springのメールサポートを使っているのでどこかで設定できると思うのですが。
とりあえず日本語のまま強引に送ってみたら、件名、本文ともにUTF-8&Base64でエンコードされていて、最近のメーラでは(GmailやYahoo!も)問題ないように思います。
日本語のテキストメールは未だにJISがほとんどなのでしょうか?もしそうならもう少し調査するか、直接JavaMail APIを呼ぶかになりますね。
sendMail { to "info@yourdomain.com" subject "テストメール" body "やあ、如何ですか?" }で簡単にメールが送れてしまうのです。これは捨てがたい。
また、GSPでのレンダリングは、
sendMail { to "info@yourdomain.com" subject "テストメール" html g.render(template:"myTemplate") }とすればテンプレートが作れます。
極めつけは添付ファイルの処理で、こんな感じ、
sendMail { multipart true to "info@yourdomain.com" subject "テストメール" body "添付しますた!" attach new File("test.jpg") }
もう楽すぎてAPIから書こうという気にはなれないですよね。
コメント追加