今回は、メール送信でちょっとハマったので、メール送信方法について書きたいと思います。
失敗したケース
以下のクラスをインポートしてメールを送ろうとしました。
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 件のコメント:
コメントを投稿