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

takegu @ takegu.com takegu @ takegu.com
2010年 4月 25日 (日) 01:26:26 JST


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

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

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 @ .@.......
        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 @ takegu.com>.
        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.. @ _e..4.]=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{|@. @ ..!....
        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 @ takegu.com>



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