GmailのSMTPサーバーに対してはJavaMailのsetFromは効かない

システムから自動配信されるメールの送信元アドレスは、「返信不可」のメールアドレスを設定することが多い。例えば、iTunesのストアから送られてくるメールの送信元アドレスは、

do_not_reply@itunes.com

である。これをプログラムでやろうとするには、SMTPプロトコルのヘッダに明示的にFromアドレスを設定してやればよい。例えばJavaMailなら、以下のようにする。

MimeMessage message = new MimeMessage(session);    // sessionオブジェクトの構築方法などについては省略
message.setFrom(new InternetAddress("no-reply@foo.bar.com", fromName));

ところが、GmailSMTPサーバーを使った場合、送信元アドレスは、no-reply@foo.bar.comにはならず、SMTPサーバーとのユーザー認証に使用したユーザーのGmailアドレスになってしまう。どうもこれは、いわゆる「なりすまし」を防ぐための、Gmail側での対処らしい。

【参考URL】
http://stackoverflow.com/questions/1557000/javamail-api-gmail-auth-and-setfrom


まあ、通常、no-replyのようなシステムメールを送信する場合、自前のSMTPサーバーを使うだろうから、これが問題になることはないだろうが。