2010年4月25日

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

どうもこんばんは。
たけぐです。

きれいな教え方で無く申し訳なく、使っている単語も正しくない部分があるかも
ですが、

tcpdump -x port 25
で、私のmxに向けてrcpt toを発行すると、こんな感じになります。

-xでバイナリではなくてプロトコルのテキストの部分がわかるので、

01:14:57.966743 IP 172.16.0.220.33359 > 72.14.213.27.smtp: P 56:85(29)
ack 157 win 1460 <nop,nop,timestamp 2737209985 227974637>
0x0000: 4510 0051 7b7a 4000 4006 f506 ac10 00dc E..Q{z@xxxxx@.......
0x0010: 480e d51b 824f 0019 7b3c 5e6e 89ac 010c H....O..{<^n....
0x0020: 8018 05b4 d6ae 0000 0101 080a a326 8281 .............&..
この行の当たりで私のアドレスを送信して、
0x0030: 0d96 9ded 7263 7074 2074 6f3a 3c74 616b ....rcpt.to:<tak
0x0040: 6567 7540 7461 6b65 6775 2e63 6f6d 3e0d egu@xxxxx>.
0x0050: 0a .
01:14:58.082699 IP 72.14.213.27.smtp > 172.16.0.220.33359: . ack 85 win 89 <nop,nop,timestamp 227986252 2737209985,nop,nop,sack sack 1 {56:85} >
0x0000: 4500 0040 5f65 0000 3406 5d3d 480e d51b E..@xxxxx]=H...
0x0010: ac10 00dc 0019 824f 89ac 010c 7b3c 5e8b .......O....{<^.
0x0020: b010 0059 dd50 0000 0101 080a 0d96 cb4c ...Y.P.........L
0x0030: a326 8281 0101 050a 7b3c 5e6e 7b3c 5e8b .&......{<^n{<^.
01:14:58.405103 IP 72.14.213.27.smtp > 172.16.0.220.33359: P 157:190(33) ack 85 win 89 <nop,nop,timestamp 227986574 2737209985>
0x0000: 4500 0055 5f66 0000 3406 5d27 480e d51b E..U_f..4.]'H...
0x0010: ac10 00dc 0019 824f 89ac 010c 7b3c 5e8b .......O....{<^.
0x0020: 8018 0059 0298 0000 0101 080a 0d96 cc8e ...Y............
ここで250番のステータスが帰ってきてます。
0x0030: a326 8281 3235 3020 322e 312e 3520 4f4b
.&..250.2.1.5.OK
0x0040: 2062 3137 7369 3439 3032 3330 3772 7666 .b17si4902307rvf
0x0050: 2e36 .6
01:14:58.405124 IP 172.16.0.220.33359 > 72.14.213.27.smtp: . ack 190 win 1460 <nop,nop,timestamp 2737210424 227986574>
0x0000: 4510 0034 7b7c 4000 4006 f521 ac10 00dc E..4{|@.@xxxxx!....
0x0010: 480e d51b 824f 0019 7b3c 5e8b 89ac 012d H....O..{<^....-
0x0020: 8010 05b4 be65 0000 0101 080a a326 8438 .....e.......&.8
0x0030: 0d96 cc8e ....

これはOKな例です。

で、メールに書かれているものに、右側の部分が無いのですが、ありませんでし
た?

一生懸命頑張れば16進数の部分もわかるのですが、できれば出ていてほしいなと。

> sendmailにわたって
> なんらかの処理がされているということですよね?

はい。tcpで接続しているので、それをトレースできるだろうと。
いうところです。

> sendmailのログ(/var/log/maillog)にも
> なにか記載されると思うのですが、そうでは
> ないのでしょうか?
sendmailの設定に問題がなければ出てくるはずです。

SYNで終わっていたり、TCPでの接続が確立していない状況だと、
falseが帰ってくるのはtimeoutなどが原因かと思います。

phpそのものが原因ではないと思います。
手でSMTPを叩いてみるのが、今後の参考になるかと。
helo hostname
mail from:<>
rcpt to:<>
data

.

という感じです。

# telnet aspmx.l.google.com. 25
Trying 72.14.213.27...
Connected to aspmx.l.google.com (72.14.213.27).
Escape character is '^]'.
220 mx.google.com ESMTP b15si4925130rvn.61

これはgoogleですが、
220が帰ってこないんじゃないかなと。

firewallかselinuxなどをはずしてみるのが良いと思います。

php以外ですが堪忍してくださいませ。

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




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