2012/10/07

GAE/Jでメール送信機能を実装してみた

GAE/Jでメールを送信する機能が必要となったので、調べて実装してみました。
参考にしたGoogle App Engineの日本語サイトは こちら(※1)
⇒https://developers.google.com/appengine/docs/java/mail/overview?hl=ja

このページによると、Mail Service Java API は、メール メッセージの送信用に JavaMail(javax.mail)インターフェースをサポートしているそうです。基本的なメール送信の実装方法はこちらのサイトをご参考ください。

ちなみにローカルで実行した場合には、メールは送信されません。 その代わりに、コンソールに送信しようとしたメールの内容が出力されます。 ここで困ったことは、メール本文は出力されなかったこと。 現在も表示方法がわからないので、もしご存知の方がいたら教えていただけると幸いです^^

GAE/Jにデプロイしてケータイにメール送信をして動作確認してみました。 そしたら、英語の件名、本文はきちんと送信されました。

が、しかし!!

日本語の件名が文字化けしていました;;
本文の日本語はきちんと表示されていたんですけど、件名だけが・・・
画面から入力した日本語を含む件名をGAE管理画面でログ出力するように実装して確認したら、きちんと表示されていました。。。

色々と調べてみたら、分かりやすいサイト(※2)を発見しました。
件名はきちんと文字コードを設定しないと文字化けしてしまうようです。 しかも、"ISO-2022-JP"にしないといけない、という事でした。
ということで、以下のように変更してみました。

変更前:msg.setSubject("日本語の件名");

変更前:msg.setSubject("日本語の件名", "ISO-2022-JP");

が、コンパイルが通らない。。。
よくよくサイトを見ると、もう一箇所修正が必要でした。

変更前:Message msg = new MimeMessage(session);

変更後:MimeMessage msg = new MimeMessage(session);

これでコンパイルが通り、日本語の件名も使えるようになりました!!
本文についても、文字コードを指定してあげる方が安全かもしれません。私はやっておきました。

以上!!

参考サイト