- 締切済み
PHPのmail()で送れていたメールが、急に受信できなくなりました。
PHPのmail()で送れていたメールが、急に受信できなくなりました。 XP上のFreebsd@Vmwareでメール送信テストをしていて、 数日前まで普通に受信できていたのですが、 同じコードが今は全く動作しません。 エラーも吐かないので原因が全く分かりません。 phpinfo();で関連していそうなところを見ると sendmail_from no value no value sendmail_path /usr/sbin/sendmail -t -i /usr/sbin/sendmail -t -i SMTP localhost localhost smtp_port 25 25 な感じです。 php.iniは SMTP = localhost smtp_port = 25 ;sendmail_path = です。 数日前までは同じ設定で受信できていましたし、 今でも送信側でエラーを吐くことはありません。 何が原因なんでしょう?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mpx
- ベストアンサー率71% (149/209)
>> yahoo.comのアカウントのみ受信できました。 >> Gmailは何時も Message accepted for deliver とmaillogには記録されますが >> 実際に受信ボックスには入っていません。 >> プロバイダのメール(test@test.com)はData format errorが相変わらず出て、 >> 受信できませんでした。 例示いただいたスクリプトでなぜyahoo.comが受信できたのか疑問ですが、 プロバイダーの応答(Data format error)が本来の動作です。 $reciever="sato"; $to="test@test.com"; $header.="To:".$to."<".$reciever.">\n"; $sendmail=mail($to,$subject,$message,$header); 上記スクリプトには、2つの間違いが有ります。 間違い1: "To:".$to."<".$reciever.">\n"; ではなく "To:".$reciever."<".$to.">\n"; にする必要があります < >内にメールアドレスを記載するのがRFC822の規定です。 間違い2: mail関数の第一パラメータと第4パラメータ両方に To が存在しています これではヘッダーに2か所のToが存在することになり、後優先のMTAでは 上記間違い1のTo側になり、届きません。第4パラメータ両方に To を 入れてはいけません。 よって、Data format errorが出ることになります
- Hohenheim
- ベストアンサー率18% (43/237)
迷惑メール送信者として、ISP側のブラックリストに登録されてしまったのではありませんか?
- mpx
- ベストアンサー率71% (149/209)
>> 数日前まで普通に受信できていたのですが、 >> 同じコードが今は全く動作しません。 >> エラーも吐かないので原因が全く分かりません。 投稿の上記内容が正しければ、PHPのコードに間違いは無いことになります。 sendmailやシステムのログを確認してみましょう。 FeeBSDをご利用のようなので、とりあえず /var/log/maillog /var/log/messages /var/log/httpd-error.log (注:ファイル名は設定に依存) などに関連するエラーメッセージは有りませんか?
補足
早速のご回答ありがとうございます。 /var/log/maillog /var/log/messages /var/log/httpd-error.log をチェックしてみたところ、 /var/log/maillog にData format errorや、DSN: Service unavailable などのエラーを発見しました。 検索すると、 /etc/hosts に sendmail: localhost : allow を追記して解決したかのような書き込みがあったので、 追記後 $reciever="sato"; //$to="test@yahoo.com"; //$to="test@gmail.com"; $to="test@test.com"; $subject="Hello"; $header="From:test<mailaddress>\n"; $header.="To:".$to."<".$reciever.">\n"; $header.="Return-path:<mailaddress>\n"; $header.="MIME-Version: 1.0\n"; $header.="Content-Type: text/HTML; charset=ISO-8859-1\n"; $message="Hello $reciever,\n\n "; $sendmail=mail($to,$subject,$message,$header); if($sendmail) { echo "mail sent "; } else { echo "error"; } のようなコードを、3つのアドレスごとに実行したところ、yahoo.comのアカウントのみ受信できました。 Gmailは何時も Message accepted for deliver とmaillogには記録されますが 実際に受信ボックスには入っていません。 プロバイダのメール(test@test.com)はData format errorが相変わらず出て、 受信できませんでした。 ブラックリストに載ってるのかもしれません。
補足
トータルで20通程度でもブラックリストに登録されたりするものなんでしょうか?