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));
ところが、GmailのSMTPサーバーを使った場合、送信元アドレスは、no-reply@foo.bar.comにはならず、SMTPサーバーとのユーザー認証に使用したユーザーのGmailアドレスになってしまう。どうもこれは、いわゆる「なりすまし」を防ぐための、Gmail側での対処らしい。
【参考URL】
http://stackoverflow.com/questions/1557000/javamail-api-gmail-auth-and-setfrom
まあ、通常、no-replyのようなシステムメールを送信する場合、自前のSMTPサーバーを使うだろうから、これが問題になることはないだろうが。