[PHP-users 35154] Re: phpのmail関数がたまにfalseを返す

choice info @ choice-site.com
2010年 4月 23日 (金) 16:59:00 JST


中出です。

レス、ありがとうございます。
また、レスが遅くなりすみません。

> ソースコードを提示してみてはどうでしょうか?

今回テストしたソースは以下となります。
hogehoge.jpサーバからfugofugo.jpあてに
test-1 @ fugofugo.jpからtest-9999 @ fugofugo.jpまで
9999通のメールを送信しています。

なお、fugofugo.jpのほうではアクセス制限はかけて
ませんし、test-xxx @ fugofugo.jpアドレスは利用できる
ものとなります。

※hogehoge.jp、fugofugo.jpはテストの際は正しいドメイン
 を設定しています。

<?php
ini_set('error_reporting', -1);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log','/tmp/php_err.txt');
ini_set('max_execution_time','0');
ini_set('memory_limit', '128M');

if(function_exists('date_default_timezone_set')){
	date_default_timezone_set('Asia/Tokyo');
}

$from='test @ hogehoge.jp';
$sender='postmaster @ hogehoge.jp';
$title='this is test mail';
$body='this is test mail';

writeLog('start');
for($i=1;$i<10000;$i++){
	$to='test-'.$i.'@fugofugo.jp';
	if(!mail($to,$title,$body,'From: '.$from,'-f '.$from)){
		writeLog('NG: '.$to);
	}
}
writeLog('end');


function writeLog($line){
	$filename='/tmp/php_log.txt';
	$line=date("Y/m/d H:i:s").' '.$line."\n";
	$fp=fopen($filename,'a');
	fwrite($fp,$line);
	fclose($fp);
	echo $line.'<br>';
}
?>

実行した結果、/tmp/php_log.txtには以下の
ようなログが記載されていました。

2010/04/23 11:41:37 start
2010/04/23 11:50:54 NG: test-5973 @ fugofugo.jp
2010/04/23 11:53:12 NG: test-7394 @ fugofugo.jp
2010/04/23 11:56:54 NG: test-9602 @ fugofugo.jp
2010/04/23 11:57:26 NG: test-9971 @ fugofugo.jp
2010/04/23 11:57:29 end

sendmailのログ(/var/log/maillog)にはこれらの
アドレスに関する記載はありませんでした。

mail関数の後に

	if($i % 5 ==0) sleep(1);

のようなスクリプトを入れ、5通ごとに1秒休ませた
場合も、以下のように変わらずでした。

2010/04/23 15:49:19 start
2010/04/23 15:53:30 NG: test-882 @ fugofugo.jp
2010/04/23 16:00:46 NG: test-2410 @ fugofugo.jp
2010/04/23 16:20:34 NG: test-6547 @ fugofugo.jp
2010/04/23 16:37:02 end


また、
phpソースの問題なのかサーバの問題なのか知りたくて
hogehoge.jpとは別のサーバに同じスクリプト(sleepなし)を
設置してテストした結果、こちらは問題なしでした。
なおサーバは
Redhat Enterprise Linux 4ES
Sendmail version 8.13.1, config V10/Berkeley 
PHP Version 4.3.9
sendmail_path	/usr/sbin/sendmail -t -i
となります。


上記の結果、PHPの問題ということでなく、このサーバの設定の
問題が濃厚なのかなぁと思います。


> たくさんの人が返信されていて、
> 「送信できない原因」を追及する方向で話が進んでいるようです。

はい、
いただいたレスを参考に調査をしているのですが、
力不足もあいまってなかなか進まずという状況です。

> ・[PHP-users 35127]  [PHP-users 35135] とかぶりますが、
>   falseになったときは、数秒sleepして、再送してみる。

についてですが、とりあえず原因を知りたいとおもっています。
どうやっても分からない場合は、再送でいこうかなぁと思いますが。

では、失礼します。

----



PHP-users メーリングリストの案内