ぷろめし|プログラミングよりも飯が好きHomeHome軽い備忘録PHPPHPのmb_send_mailでメールが届かない原因と特定のメールアドレスだけ届かない原因PHPでお問合せフォームなどの運用をしていたところ、突然「フォームからメールが受信できなくなった!」なんてことはよくある話。原因は問題の数だけあると言っていい程、特定には根気が必要です。動き始めた...なんてこともあります。今回はよくあるPHPのmb_send_mailで起きる、何故かメールが届かない原因についてまとめてみました。まとめmb_send_mailの書き方を間違えているそもそもmb_send_mailの書き方を間違えていればメールが届かないのは当たり前なので見直します。基本的にエラーが表示されるので気が付きますが、下記に載せているケースのようにエラーが表示されない、気がつかないなどのケースもあるので全力で自分を疑いましょう。);基本的なところなので迷うことは少ないと思いますが簡単な説明を下記に載せておきます。$pfromは、Return-Pathというものですが別途解説します。$to:送信先のアドレス$subject:件名$message:本文$headers:ヘッダー(From:(testname)<test@exsample.com>)$pfrom:Return-Path設定方法の詳しい解説は色々なところに載っているので、そちらをご参照下さい!ヘッダーにReturn-Pathがない特定のメールアドレスにだけメールが届かない問題で一番最初に目にするのがReturn-Pathです。このReturn-Pathは、メールが届けられなかった場合の返信先のことを指します。一般的には送信元のアドレスを載せています。この項目が無くても大概の場合は送信&受信できるのですが、一部受信を拒否する送り先があったりするので、もし設定してないなら試してみると良いかもしれません。書き方は簡単で-fをつけて送信元のアドレスを追記してあげればOK。これをmb_send_mailの第5引数に載せるだけです。R新品価格¥791-.スパム判定をされているこれが一番厄介なんです。mb_send_mailで問題が発生すると大概エラーが出力されて明確に問題があることに気が付きます。スパム判定をされているとmb_send_mailでは正常に送付されているけれど、受け取り手が拒否している状態になります。この場合、Return-Pathにエラーメールが送付されてきますが、ここで問題になるのが、WEBサーバーとは別にメールサーバーを持っている場合です。自分のメールサーバーとはいえ、外部のメールサーバーにWEBサーバーからメールを送っていると、誤ってスパム判定されてしまう可能性があります。するとメールが届かない、拒否された状態になってしまいます。「でも安心だよね!Return-Pathがあるじゃないか!」と希望を持ちますが、Return-Pathには自分のメールが記載されているのでエラーメールも拒否されているのです。errors」のエラーを目にしたと思います。[●●.●●●.●●●.●●●.●●●].」と続いていると思います。簡単に言えば「このIPは拒否されてるよ」です。この問題は、WEBサーバーとOffice365などの外部メールサーバーを使っている場合に見受けられる問題で完璧に詰みます。運良くこの記事を読まれた方はスパム判定がされていないかを確認してみましょう。「特定のアドレスにメールが届かず、その他のメールアドレスには正常にメールが届いている」場合には特に注意して下さい。受信拒否リストから自分自身を削除する」を読んで受信拒否リストからIPアドレスを削除しましょう。まとめテスト環境だと正常に受信するのに本番環境やクライアント側だけ受信できないケースは多いものです。大概は受信元に原因があるものですが、万が一システムに問題があったら肝が冷えます。一生懸命システムをチェックして、作り直して、テスト環境でバッチリ!でも、本番環境のクライアント側ではエラー。そんなときは、本番環境を詳しく見直してWEBサーバー意外の問題に目を向けることも大切です。エラーの解決は一瞬の閃きによることが多いので色々な可能性を考えてみると案外サッと解決したりします。私は1週間以上ハマりましたけどね。真性のお家大好きフリーランスです。プログラムよりご飯の方が断然好き!博多出身のデブデザイナー。Cloudがそんなに良いのか?CCとCSの違い。Getewayの原因と意味についてフォトショップのドロップレットが通信できない。