• 締切済み

Linux:PHPでTELNETによるSMTP結果取得について

度々利用させていただいています。 以下質問、ご存知の方がいましたら 是非是非教えてください。 今現在、PHPプログラムにおいて [TELNETを使用したSMTPコマンド発行]プログラムを 作成しています。 そこで一つ解決できない問題が生じてしまいました。 問題:   今現在使用しているコマンド発行関数は「system()」関数です。   引数には('telnet hogehoge.jp 25')としています。   出力結果としては・・・     Trying 127.0.0.1...     Connected to helpserve.jp.     Escape character is '^]'.   と出力されます。   しかし、ターミナルソフトを使用してtelnet hogehoge.jp 25を   実行すると・・・     220 hogehoge.jp ESMTP Postfix   と、実行結果コードが出力されます。   この「220」が出力結果としてほしいのですが   どうしても取得出来ません。   色々とその辺の(exec,passthru,shell_exec)関数を試して   みたのですがどうしても取得することが出来ませんでした。      そこで、どうすれば取得できるのご存知の方、是非   お知恵を拝借したいと思います。   (すごい推測ですが、もしかして220のコードは    TELNETが出力しているから取得できない・・・    そんな気はしています。) 環境:  OS:FwdoraCore3  PHP:Ver.5.1.6 なにとぞ、よろしくお願いします。

みんなの回答

回答No.2

> ポートOPEN→送受信 これができるのなら、あとはVRFYコマンドを送るだけでしょう。 ところが、最近はVRFYを無効にしているメールサーバがほとんどです。 メールアドレスが有効か調べることができないようにするなどの理由です。 VRFYを送ると 252 2.5.2 Cannot VRFY user; try RCPT to attempt delivery (or try finger) 502 Command not implemented などが返ることが多いです。 これはFedora上でtelnetを実行してみたら確認できると思います。

biltukisan
質問者

お礼

ご回答、誠にありがとうございます。 なるほど、確かに言われてみれば、直接ポートを 操作していますのでその通りですね。 ありがとうございます。 確かに、VRFYを送ると最近は502が帰ってくるようです。 ですが、その場合は送信できるものとみなします。 アドバイス、本当にありがとうございます。

回答No.1

telnetを実行してそれに処理させる必要があるのでしょうか? PHPでhogehoge.jpのポート25に接続して送受信したらいいと思います。

biltukisan
質問者

お礼

ご回答、ありがとうございます。 確かに直接PHPにて  ポートOPEN→送受信 という流れが一番簡単なのですが、 「VRFY」というコマンドを発行したく思っています。

関連するQ&A