2011-11-10 5 views
0

Ehlo 명령에서 250 행의 마지막 행을 읽고 싶습니다. 현재 250이있는 첫 번째 행을 읽습니다. 여기에 현재 코드는Fget in smtp function

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

당신이 기다리고있어 응답은

250-foo 
250-bar 
250 OK 

처럼 마지막 줄이 세 자리 코드 있지만 공간 후 -을 가지고 있지으로 표시됩니다 보인다.
= > 3 자리 코드 뒤에 공백 이외의 다른 문자가 오는 모든 행을 읽습니다.

오와 BTW
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); 

:이 교육 목적을 위해 순전히하지 않는 한이 스스로 코드를하지만, 예를 들어 같은 이메일 라이브러리를 사용하지 않는 Swiftmailer