2010年4月21日

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

中出です。

レス、ありがとうございます。

> > 説明不足で申し訳ありません。
> > 今回は、当方で管理する2つのサーバで
> > 配信と受信をしていますのでブロックされている
> > ということはないと思います。

> キャリアのスパム判定は、キャリアごとに異なりますが、
> 大抵の場合、一定の期間内(秒分単位)に特定のIPから
> 一定以上のメール送信が行われた時点でブロックされます。
> 送信元のメールサーバのアドレス情報が1つでも2つでも
> 両者から同じように一定の期間内にメールが一斉送信されていれば同じことです。
>

いえ、配信するサーバも受信するサーバも当方で
管理するサーバとなっています。
で、受信するサーバのほうでは特に拒否するような
設定は行っておりません。

ですので、配信サーバのほうで、5000件配信したら
受信サーバのほうに5000件届いて欲しいのですが、
なぜか、うち数件がmail関数のエラーにより配信され
ない(sendmailのログにも載らない)という状況です。
また、エラーになるアドレスはいつも決まっている
わけではありません。


> あと、/var/spool/mailも確認されましたか?
> まだであればそこも見てください。
> そこに送信したはずのメール情報が出力されていなければ
> phpからsendmailコマンドに処理自体が依頼されていない可能性が高いです。

確認しましたが、期待するメールはありませんでした。

> あとはsocket通信の状態をモニタリングしてみるのも手だと思います。
> メール1通あたりのデータ量が多すぎるのか、
> 短い間隔で頻繁にsocketのopen/closeを繰り返すため通信がダウンしたのか
> 原因がわかるかもしれません。
> Google先生に「CentOS socket」といれれば
> たぶん説明してくれるサイトが見つかります。
>

ありがとうございます。
調べてみます。


> > 件数が少ない場合は、この現象は発生しません。
> > 5000件程度の配信をすると5000件のうち、数件で
> > mail関数がfalseを返します。(処理は止まりません)
> > なお、必ず「最初の数回」とか「3件目と4件目」ということでなく、
> > ランダムに数回発生します。
> ちなみに少ない件数は、何件ぐらいで試されたのでしょうか?

1000件程度です。

> 少ない件数で問題がないのであれば、
> ロジックの組み方に問題があるような気がします。
>

うーーん。
そういわれるとそうかなぁとも思うのですが、
発生したり、しなかったりということでなんだか
すっきりしません。

> あとは他の方がレスをされていますが、
> mail()関数にこだわる理由がないのであれば
> PEARやPECL、Zend Framework APIなどを利用してみるのもありだと思います。

mail関数にこだわるわけではないのですが、
なぜ、できないのかが気になりますので、他を
探すよりもまずは原因を追究したいです。

> > はい、知っています。
> > ただ、非効率ということであって、不可能ということで
> > はないと理解してます。
> >
> > もしかして、mail関数がエラーを返したのは、
> > 「SMTPソケットを開けなかった」ということなんでしょうか?
> > そうれであれば、sendmailにわたらなかったので
> > sendmailのログにも記載されなかったという理由が
> > 納得できます。
> マニュアルで「非効率」とか「推奨されない」と書いてある場合、
> 十中八九、その方法は使用しないほうが賢明です。
> 言語として理論上は動作するが、確実な動作保証がないということです。
> mail()関数がfalseを返すケースについては、
> phpのソースを落としてきてmail関数を定義しているソースを
> ほじくってみればわかると思います。
> ※すみません、私はまだほじってないので^^;
>

すみません。
やってませんでした。
見てみますが、わかるかどうか…。(^^;)

>
> > ただ、phpのエラーログに記録されなかったのは
> > 不明ですが。
> 前のメールにも書きましたが、
> errorやwarningなどではなく
> boolean型の「false」が帰ってきているわけですよね?
> つまり、それはマニュアルにも書いてあるとおり、
> php自身はmail()関数内において正常処理、
> (判定による意図的なエラー処理も含む)
> つまり、想定の範囲内の動きをしたわけです。
> phpにとってそれはエラーではありません。
>
> エラーログにでるということは、
> phpとして想定外の動きをされたので例外処理をしたということです。

たびたび説明していただき、ありがとうございます。
理解しました。

以上、よろしくお願いします。

----

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年4月21日 18:00
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/95240
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。