Php smtp函数中的Fget

Php smtp函数中的Fget,php,Php,我想从Ehlo命令中读取最后一行,即250。目前它读取的第一行有250个字符。这是当前的代码 fputs($socket, "EHLO server1.aa.com\r\n"); // ehlo command $res = fgets($socket, 1024); // read output if (substr(trim($res), 0, 3) != "250") { 请帮助我修改代码当您在套接字上执行fgets()(或任何操作)时,不能保证您将获得指定的数据量。我认为您应该做的

我想从Ehlo命令中读取最后一行,即250。目前它读取的第一行有250个字符。这是当前的代码

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

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

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

请帮助我修改代码

当您在套接字上执行
fgets()
(或任何操作)时,不能保证您将获得指定的数据量。我认为您应该做的是将所有数据提取到字符串缓冲区中,并解析该缓冲区,直到找到所需的数据。

您期望的响应如下所示

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);
哦,顺便说一句:除非这纯粹是出于教育目的,否则不要自己编写代码,而是使用电子邮件库,例如