11

サーバーで送信されているメールの問題を確認するにはどうすればよいですか? 簡単なテストを実行します。

if(mail($to, $subject, $message)) {
echo 'Mail Sent';
}

テストがテキストを出力するもの。が、一向にメールが届きません。

問題を追跡するにはどうすればよいですか?

4

6 に答える 6

13

それはかなり長い話です。いくつかの箇条書き (mail() が true を返し、エラー ログにエラーがないことを前提としています):

  • 送信者アドレス ("差出人") はサーバーのドメインに属していますか? そうでない場合は、そうしてください。
  • サーバーがブラックリストに登録されていますか (例: spamhaus.org で IP を確認してください)? これは、共有ホスティングではごくわずかな可能性です。
  • メールは迷惑メールフィルターでフィルタリングされていますか? スパム フォルダがあるフリーメーラーでアカウントを開き、見つけてください。また、迷惑メール フィルタのないアドレスにメールを送信してみてください。
  • 送信者アドレスを追加するには、mail() の 5 番目のパラメータ「-f」が必要でしょうか? (PHP マニュアルの mail() コマンドを参照してください)
  • ログファイルにアクセスできる場合は、もちろん、上記で提案したようにそれらを確認してください。
  • 「差出人」アドレスを確認して、バウンス メール (「差出人に返送」) の可能性を確認していますか? 別の「エラー送信先」アドレスを設定することもできます。

ドイツ語を話す人のために、私はこの問題についてかなり網羅的な「何をすべきか」を以前に書きました。ここを参照してください。

于 2009-11-01T19:24:59.687 に答える
4

Myles に従って、Linux ボックスを使用している場合は、コマンド ラインで次の操作を行います。

# echo “Body text.” | mail -s “Hello world” you@example.com

そのメールが届かない場合は、そのボックスのメール システムに問題があります。これは、あなたが尋ねた PHP の質問とは別の質問です。

于 2009-11-01T19:42:27.810 に答える
3

PHPマニュアルから:

Return Values

Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.

It is important to note that just because the mail was accepted for delivery, **it 
does NOT mean the mail will actually reach the intended destination**.

次のステップに進む方法はわかりませんが、ここが重要なポイントです。

于 2009-11-01T19:19:36.873 に答える
2

すべてのトラブルシューティングが失敗した場合 (不明な理由で mail() が false を返したと仮定した場合)、PHPMailerなどのメーリング スクリプトに切り替えて、 mail() を完全にバイパスし、SMTP 経由で直接接続し、広範なデバッグ モードを提供します。そうすれば、実用的なソリューションを設定するか、問題の核心を見つけることができるはずです。

于 2009-11-01T22:58:04.097 に答える
1

最初に PHP エラー ログから始めて、次に sendmail ログから始めます。また、コマンド ラインから sendmail を試し、PHP 構成をチェックして、メール送信用に正しくセットアップされていることを確認します。

于 2009-11-01T19:23:23.903 に答える
1

ここでライブ Web サーバーに取り組んでいますか、それとも個人的な開発サンドボックスに沿った何かに取り組んでいますか? (つまり、自宅のマシンですか?) 後者の場合は、ISP (Cox) による送信メール ポートのフィルタリングで過去に多くの問題が発生したことをお伝えできます。(彼らはそうしないと言うだろうが、私は彼らがそうしていると確信している。)

また、配信された数日前に Cox のメール スプールに引っかかってしまったアウトバウンド メッセージもいくつか受け取りました。

お役に立てば幸いです。

于 2011-01-26T02:45:26.660 に答える