SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

PHP送信メールがMicrosoftの「受信拒否リスト(ブラックリスト)」に登録された(´;ω;`)

目次

PHP送信メールがMicrosoftの「受信拒否リスト」に登録された(´;ω;`)録

今回は「Microsoft 365のMicrosoft Exchange Onlineでメールをホスティングしている企業でPHPプログラムから送信したメールがMicroSoftの「受信拒否リスト」に登録されてしまい、それに気づいて解決するまでのドタバタの記録です。

アプリケーションサーバーから送信したメールだけ!が届かない

PHPプログラム内では普通に「mb_send_mail」関数を使って送信していました。

www.php.net

MTA(Mail Transfer Agent)はデフォルトの「sendmail」を使ってます。

特定のMTAに依存したくないので「MTA へ渡す コマンドライン引数(additional_params)」は 使ってはいません。

なにより、Microsoft 365のMicrosoft Exchange Onlineでメールをホスティングしているほかの企業にはメールが届いているのに、ひとつの企業だけににメールが届かない。

しかも、PHPから送信したメールは届かないけど、他の方法(メーラーから)で送信したメールは普通に届く。

そんな状況でした。

迷惑メールフォルダにもはいっていない

最初は「迷惑メールフォルダ」にはいって気づいてないのだろうと疑いました。

でも、迷惑メールフォルダのどこにもはいっていません。

そうなると、一番疑わしいのが「受信拒否リスト」(ブロックリストとかブラックリストと書かれている記事もあるようですが)への登録です。

これに登録されると

IP アドレスとデータセンターを介してお客様との間のすべての通信が妨げられます。

ということになります。

IPアドレスレベルで拒否されるので、迷惑メールにすらならないわけです。

ただ、これが原因で配信不能になった場合、エラーになったメール送信者アドレスにエラーコードなどが書かれた「配信不能レポート (NDR) 」が送信されるはずなのですが、それすら届いてないところが妙です。

learn.microsoft.com

これが届かないと調査のしようがありません。

原因を探りました。

Envelope-Fromにありえないメールアドレスが・・

配信不能レポート (NDR) は表面に見えている「Fromのアドレス」ではなく、メールへだーにある「Return-Path(Envelope-From)」に設定されたアドレスに送信されます。

これは内部的に設定されるのですが、メーラーなどで送ったメールだと、だいたい「Fromアドレス」と同じものがコピーしてに「Return-Path(Envelope-From)」にセットされています。

だから、今回のPHP送信メールもそうだと思ってました。

ところがメールヘダーを確認すると全く違うアドレスが設定されていました。

よく見ると「PHP実行ユーザ名@PHPホスト名」・・・phpuser@hogehoge.jpみたいな・・・となっていて、完全に辻褄あわせのダミーアドレスです。

困って、詳しい方に確認すると、これが今使っている環境のデフォルト動作だよ・・とさらっと言われました。

mb_send_mailで明示的に指定しなかったらPHPで生成されるそうなのです。

そんなこと聞いてねえよ!!・・と暴れたい気分に一瞬なりましたけど(笑)、原因はわかりました。

ログを送ってもらうと「5.7.606」が・・

とりあえず、原因はわかったのでPHPを修正しました。

mb_send_mailの第五引数に「-f <Fromのメールアドレス>」をsendmailに渡すオプションとして追加し「配信不能レポート (NDR) 」を受け取れるようにしました。

受け取ったメールには以下のメッセージがありました。

550 5.7.606 Access denied, banned sending IP ・・・

こちらの一覧から探してみると

learn.microsoft.com

意味は「試みている送信元の IP が禁止されています」で、対処法は

詳細については、「リストから除外ポータルを使って、受信拒否リストから自分自身を削除する」を参照してください。

とあり,そのページがこちらです。

learn.microsoft.com

とりあえず、メールが届かない原因は、受信拒否リスト(ブラックリスト)にIPアドレスが登録されてしまっていることだというのは間違いなく、これを解除してもらわないことには一歩も前にすすめない・・のは確定のようです。

受信拒否リストからIPアドレスの削除申請をする

マイクロソフトの受信拒否リストからIPアドレスを削除する申請画面がありました。

上記リンクのページに書いてありますが、簡単に引用しておくと

1.Office365スパム対策IP除外ポータル(delist IP)を開く

sender.office.com

2.メールアドレスとIPアドレスを入力して送信
3.入力したメールアドレスあてに、マイクロソフトからメールが届く
4.メールに記載されたリンクからポータル画面に戻る
5.ポータル画面から「[IP をリストから除外」をクリックする

みたいな感じです。

操作そのものは簡単です。

すんなりいかず

  • マイクロソフトからのメールが何時間待っても届かない
  • 除外申請の完了となってからメール送信しても相変わらず拒否される

などということになることも、まま、あるようですが、、うまく除外できれば、メールが届くようになります。

ただ、注意書きにもあるように

制限が削除されるまでに最大 24 時間かかる場合や、結果が大きく異なる場合があります。

とわざわざ書かれているので、メールが送信できるのを試すのは、1日待ってからのほうがよさそうに思いました。

あと、解除申請時の「メールアドレスのドメイン」と解除する「IPアドレス」が、最低限ドメイン名レベルで一致しないと、申請しても解除できなかったという方もいました僕は、とりあえずメールを受け取れるアドレスでやってみたらいけましたけれど、同じIPアドレス拒否でもエラーコードはいろいろあるみたいなので、そういうこともあるのかな・・ということで書いておきます。

まとめ

実は。

そもそものきっかけとなったMicrosoft365の「Exchange Online」で「受信拒否リスト」に登録された原因は、いまだにわかっておりません。

同じようなメールを送信しても受信拒否リストに登録されないどころか、迷惑メールにもはいらないExchange Onlineユーザもいますし、法則性が見つからないからです。

ただ、昔と違ってスパム疑いのメールへのチェックは厳しくなってるのは事実です。

メール送信のプログラムを作った時に、テストで届いたメールのヘダー情報まで、きちんと確認して、スパムと疑われないように気をつけろ・・ということでしょう。

ではでは。