株式会社ライブキャストロゴ 株式会社ライブキャスト

迷惑メールのメッセージ

システムから送信されたメールがGmailの迷惑メールに振り分けられてしまうことたまにありますよね?

WordPressにコメントがあるとメール通知があるように設定していましたが、ある時、そのメールがGmailで迷惑メールに振り分けられていることに気づきました。

この事象が発生した環境は以下の通り。
●サーバー
・Amazon EC2
・Nginx
・WordPress(PHP)
・MySQL
●クライアント(メール)
・Gmail
・Google Chrome

送られたはずのコメント通知のメールがなかなかこないな〜
と思い、Gmailを開いて迷惑メールを見てみると、、、なんと!その通知メールがはいっておりました。
メールには以下のようなメッセージが。

このメッセージが [迷惑メール] に振り分けられた理由: 迷惑メールで一般的に使用されるコンテンツが含まれています。

ではなぜ迷惑メールに振り分けられてしまったのでしょう?
おそらく複数の要素があるのだと思いますが、調査した結果、いくつか対策をすることによって迷惑メールに振り分けられないようにすることができたので、その内容を簡単にまとめておきたいと思います。

まずは、メールヘッダーを確認してみます。
メールが経由したサーバーのパスが記録されています。

以下の手順でその内容を確認することができます。

メールヘッダーの表示

するとメールヘッダーがブラウザの新規タブで開きますので、そのログを確認することができます。

メールヘッダーをGmailで開いたところ
よく見てみると・・・
Warningが出ていることに気づきました。

X-Authentication-Warning: ip-172-xx-x-x: nginx set sender to info@example.com using -f

このサイトでは、php.iniでPHPのプログラムから送信されるメールのFromアドレスを固定で指定するようにしていたので、nginxユーザーが勝手にFromのメールアドレス書き換えてるよ!ってことでログが出ているようでした。

php.iniには以下のような設定をしています。

emacs /etc/php.ini
sendmail_path = /usr/sbin/sendmail -t -i -f info@exsample.com

Warningをなくすには、nginxをsendmailに信頼済みユーザーであることを教えてあげればOKです。

/etc/mail/trusted-userにnginxを追記します。

# trusted-users – users that can send mail as others without a warning
# apache, mailman, majordomo, uucp, are good candidates
nginx

コメントを入力して再度メールが届くか試してみました。
Warningのメッセージは出なくなりました。

※ こちらのサイトを参考にさせていただきました。
phpからメールを送るとX-Authentication-Warningヘッダがご丁寧に | O.R.E.N.A.N.T.E. 俺なんて… orz

でもまだ迷惑メールに振り分けられてしまいます…
もう一度ログをじっくり見てみます。

他にも怪しい感じのログがありました!

Received-SPF: neutral (google.com: 52.xx.xx.xxx is neither permitted nor denied by best guess record for domain of info@example.com) client-ip=52.xx.xx.xxx;

どうやら送信元のメールアドレスが偽装されていると判断されているみたいです。

なので送信元のメールアドレスが偽装されていないことを証明してあげればいいのです。
それにはDNSでSPFレコードというものを設定し、送信元のメールアドレス(のドメイン)が正しいことをわかってもらえるようにしてやります。

SPFについてはこちらを参考にさせていただきました。

SPFレコードを Amazon Route 53 に登録する | あぱーブログ

では、早速DNSの設定をしてみたいと思います。
AWS マネジメントコンソールよりRoute 53を開きます。

Route 53のDashboard画面

DashboardよりHosted Zonesを選択します。

Hosted Zonesの一覧

該当のDomain Nameを選択すると、設定済みのDNSレコードが表示されます。

Create Record Setで入力モードにする

画面右側の入力エリアからSPFレコードを設定します。

SPFレコードの設定

TypeにはTXTを選択します。

Valueは

“v=spf1 ip4:54.xxx.xxx.xxx -all”

このような形式で入力します。
54.xxx.xxx.xxxの部分には、そのホストのIPアドレスを指定します。

DNS設定が伝搬されるまでしばらく待ち、再度ためしてみたところ、、、
今度はうまくいきました!

Received-SPF: pass (google.com: domain of info@example.com designates 54.xxx.xxx.xxx as permitted sender) client-ip=54.xxx.xxx.xxx;

同じような現象が起きていて困っている方、DNSの設定が可能であればSPFレコードの設定を一度試してみてください!この対策が迷惑メール振り分け防止の参考になれば幸いです。