2009-11-01 15 views
10

私のサーバー上でメールを送信する際の問題を確認するにはどうすればよいですか? 私は簡単なテストを実行します。PHPメールのトラブルシューティング

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

テストは、テキストを出力します。しかし、メールは到着しません。

問題を追跡するにはどうすればよいですか? PHPマニュアルから

答えて

13

これはかなり長い話です。 (そのメールを仮定すると、()がtrueを返し、エラーがエラーログに存在しない)いくつかの箇条書き:

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

ドイツ語のスピーカーにとって、私はこの問題に関してかなり前に「何をすべきか」と書いています。 hereを参照してください。あなたがLinuxボックス上にある場合、コマンドラインでこれを行うマイルズ後

+0

おそらくhttp://spamhaus.org/ – MiseryIndex

+0

です。修正済みです。ありがとう。 –

+0

spamhaus.orgに掲載されていません(phew!) 送信者ドメインはサーバーに属します。 私はいくつかの電子メールアカウントにそれを受け取っていないすべてのものを送信しようとしました。 (.Mac、gmail、yahoo) 私はログファイルを調べます。 メールログがどこにあるのか分かりますか? ありがとう –

2

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**. 

その次のステップを取ることがどのようにわからないが、それはここでは重要なポイントです。

1

私が最初にやるべきことは、PHPエラーログとそれからあなたのsendmailログです。また、コマンドラインからsendmailを試して、PHP設定をチェックして、メールを送信するために正しく設定されていることを確認してください。

3

、:

# echo “Body text.” | mail -s “Hello world” [email protected] 

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

+0

Hmmm、コマンドが見つかりません。 echo "本文テキスト" | mail -s "hello world" [email protected] -bash:mail:コマンドが見つかりません。 –

+0

「メール」はどうですか。 –

+0

何も返されません。 –

2

すべてのトラブルシューティングが失敗した場合 - 理由がわからないためmail()がfalseを返した場合 - mail()を一切迂回してSMTP経由で直接接続できるようにするメールスクリプトPHPMailerに切り替え、 。そうすれば、実際の解決策を設定したり、問題の中核を見つけることができます。

+0

実際にhtmlMimeMail5も試してみましたが、これもSMTPを使っていると思いますが、同じ運がありました。 –

+0

クラスにデバッグモードがありますか?ログを確認することなく、SMTPエラーメッセージを戻す必要があります。 PHPMailerは間違いなく可能です。 –

1

ここではライブウェブサーバーで作業しているのですか、個人開発用サンドボックスのラインに沿って作業していますか? (つまり、自宅のマシン?)後者の場合、ISP(Cox)が送信メールポートをフィルタリングすることで、私は過去に多くの問題を抱えてきたことが分かります。 (彼らはそうしないとあなたに伝えますが、私はだと確信しています。です。)

私はいくつかのアウトバウンドメッセージを受け取りました。それは、私に配信される前の数日間、Coxメールスプールに巻き込まれてしまいます。

私はそれが役に立ちそうです。

関連する問題