• 締切
  • 困ってます

PHPのmail()で送れていたメールが、急に受信できなくなりました。

  • 質問No.5891328
  • 閲覧数331
  • ありがとう数6
  • 回答数3

お礼率 43% (10/23)

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件)

  • 回答No.3

ベストアンサー率 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が出ることになります
  • 回答No.2

ベストアンサー率 18% (43/237)

迷惑メール送信者として、ISP側のブラックリストに登録されてしまったのではありませんか?
補足コメント
methinks

お礼率 43% (10/23)

トータルで20通程度でもブラックリストに登録されたりするものなんでしょうか?
投稿日時:2010/05/13 23:49
  • 回答No.1

ベストアンサー率 71% (149/209)

>> 数日前まで普通に受信できていたのですが、
>> 同じコードが今は全く動作しません。
>> エラーも吐かないので原因が全く分かりません。

投稿の上記内容が正しければ、PHPのコードに間違いは無いことになります。
sendmailやシステムのログを確認してみましょう。
FeeBSDをご利用のようなので、とりあえず
/var/log/maillog
/var/log/messages
/var/log/httpd-error.log (注:ファイル名は設定に依存)
などに関連するエラーメッセージは有りませんか?
補足コメント
methinks

お礼率 43% (10/23)

早速のご回答ありがとうございます。
/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が相変わらず出て、
受信できませんでした。

ブラックリストに載ってるのかもしれません。
投稿日時:2010/05/13 23:46
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ