2010年4月21日

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

ナカジマです。

以下インラインにて。
----
On Wed, 21 Apr 2010 17:02:37 +0900
choice <info@xxxxx> wrote:

> > MugeSoです。

> >
> > > とのこと。受け入れられない原因ってなんなのでしょうか?
> > 一度に大量にメールを配信する場合に、たとえば携帯キャリア宛てであるとspam
> > 業者として判断されてブロックされる事があります。
> > あるいは、単純に通信経路に問題があるかです。
>
> 説明不足で申し訳ありません。
> 今回は、当方で管理する2つのサーバで
> 配信と受信をしていますのでブロックされている
> ということはないと思います。
キャリアのスパム判定は、キャリアごとに異なりますが、
大抵の場合、一定の期間内(秒分単位)に特定のIPから
一定以上のメール送信が行われた時点でブロックされます。
送信元のメールサーバのアドレス情報が1つでも2つでも
両者から同じように一定の期間内にメールが一斉送信されていれば同じことです。


> あと、sendmailのログ(/var/log/maillog)に
> 該当するメルアドの記載がないのが不明です。
>
> sendmailに渡せなかったから、ログに記載がない
> ということなのかなぁとおもっています。
当然、mail()関数は、内部的にsendmailコマンドをたたいているわけですから
sendmailコマンドに処理が渡らなければログは出ません。

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

sendmailコマンドに処理が依頼されていれば
少なくともそこに送信しようとしたメールの内容が出力されているはずです。
メールのスプールについては以下のサイトが参考になるかと思います。
http://www.fmmc.or.jp/fm/nwts/rh_linux/ch5/5_4.html

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


----
On Wed, 21 Apr 2010 17:10:41 +0900
choice <info@xxxxx> wrote:
>
> 件数が少ない場合は、この現象は発生しません。
> 5000件程度の配信をすると5000件のうち、数件で
> mail関数がfalseを返します。(処理は止まりません)
> なお、必ず「最初の数回」とか「3件目と4件目」ということでなく、
> ランダムに数回発生します。
ちなみに少ない件数は、何件ぐらいで試されたのでしょうか?
少ない件数で問題がないのであれば、
ロジックの組み方に問題があるような気がします。

どうしてもmail()関数でやりたいのであれば、
全てのアドレスを30件とか10件に分割してBCCにセットし
それをsleep(30)ぐらいの間隔で送信するとかはだめなのでしょうか?
(たぶん30秒もあれば大丈夫だとは思いますがサーバのスペックにもよるかも)
メールを受け取る側的には、Toで送信されたように見えるので問題ないかと。

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


--
ナカジマ
<blueseeds@xxxxx>

_______________________________________________
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日 17:32
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/95236
トラックバック
コメント
コメントする




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