今回は、メール送信でちょっとハマったので、メール送信方法について書きたいと思います。
失敗したケース
以下のクラスをインポートしてメールを送ろうとしました。
import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;メール送信処理はこんな感じ。
Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); Message msg = new MimeMessage(session); try { msg.setFrom(new InternetAddress("hoge@example.com")); msg.addRecipient(Message.RecipientType.TO, new InternetAddress("hoge@example.com")); msg.setSubject("テスト"); msg.setText("テストメールです"); Transport.send(msg); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); }これを実行してみると・・・
メール本文はちゃんとMIMEエンコードが行われている。
しかし、Subjectがエンコードされておらず、文字化けして見えてしまう。
う~ん。
調査
GAEでメールを送る場合、オーナー(もしくは、オーナーとして招待したユーザ)のメールアドレスから送る必要がある。今回Fromに指定したアドレスはオーナーのアドレスであることはGAEの管理画面からも確認できている。
となると何が原因なのか。
GAEのメール送信について調べてみよう。
MailService (Google App Engine Java API)
https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/mail/MailService
あ、そもそもメール送信に使うクラスが違っていたみたい。リトライ
という事で、以下のクラスをインポート。
import com.google.appengine.api.mail.MailService.Message; import com.google.appengine.api.mail.MailServiceFactory;メール送信処理は以下のように変更
Message message = new Message(); message.setSender("hoge@example.com"); message.setTo("hoge@example.com"); message.setSubject(subject); message.setTextBody(body); try { MailServiceFactory.getMailService().send(message); } catch (IOException e) { e.printStackTrace(); }無事文字化けも無くメール送信が完了しました。
0 件のコメント:
コメントを投稿