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);
これでコンパイルが通り、日本語の件名も使えるようになりました!!
本文についても、文字コードを指定してあげる方が安全かもしれません。私はやっておきました。
以上!!
参考サイト
- (※1)Google Developers : Google App Engine > Mail Java APIの概要
GAE/Jでメール送信するための方法が書いてある - (※2)JavaDrive:Home > JavaMailでメール送信 > メールの送信 > Messageクラス
JavaMailで件名に日本語を使う方法が書いてある