ウェブサイト高速化モジュールを試す with Tomcat | Home | Grails: サービスによるビジネスロジックの分離
2011/01/18 23:34 | 印刷

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から書こうという気にはなれないですよね。

コメント追加

タイトル
名前
E-mail
Webサイト
本文
情報保存 する  しない
  • 情報保存をすると次回からお名前等を入力する手間が省けます。
  • E-mailは公開されません - このエントリーの新規コメント通知が必要なら記入します。