Php smtp函数中的Fget
我想从Ehlo命令中读取最后一行,即250。目前它读取的第一行有250个字符。这是当前的代码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()(或任何操作)时,不能保证您将获得指定的数据量。我认为您应该做的
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);
哦,顺便说一句:除非这纯粹是出于教育目的,否则不要自己编写代码,而是使用电子邮件库,例如