我想从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") {
请帮我修改代码
答案 0 :(得分:1)
您期待的回答看起来像
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);
哦,顺便说一下:除非这纯粹是出于教育目的,否则不要自己编码,而是使用电子邮件库,例如: Swiftmailer
答案 1 :(得分:0)
当您在套接字上执行fgets()
(或任何内容)时,无法保证您将获得指定的数据量。我认为您应该做的是将所有数据提取到字符串缓冲区中,并解析该缓冲区,直到找到所需的数据为止。