2011-11-10 2 views
0

Ehloコマンドから最終行250を読みたいです。現在、250行の最初の行が読み込まれます。ここでは、現在のコードsmtpファンクションのFget

fputs($socket, "EHLO server1.aa.com\r\n"); // ehlo command 

$res = fgets($socket, 1024); // read output 

if (substr(trim($res), 0, 3) != "250") { 

は、私はあなたがソケットにfgets()(または何か)を行うと、あなたが指定したデータの量を得ようとしていることを保証するものではありませんコード

答えて

0

を修正する助けてくださいです。私が考えるべきことは、すべてのデータを文字列バッファにフェッチし、必要なデータを見つけるまでそのバッファを解析することです。

1

最後の行は、3桁のコードが、スペースの後に-を持っていないでマークされ

250-foo 
250-bar 
250 OK 

ようにあなたが期待している応答が見えます。
= > 3桁のコードの後に​​スペース以外のものが続くすべての行を読み取ります。

function fetch_esmtp_response($source) { 
    $response = array(); 
    do 
    { 
     $s = fgets($source, 1024); 
     $response[] = $s; 
    } while(strlen($s) > 3 && ' '!==$s[3]); 
    return $response; 
} 

fputs($socket, "EHLO server1.aa.com\r\n"); // ehlo command 
$response = fetch_esmtp_response($socket); 
var_dump($response); 

ohとbtw:これは純粋に教育目的でない限り、自分でコードを作成するのではなく、たとえば次のような電子メールライブラリを使用します。 Swiftmailer

関連する問題