获取smtp功能

时间:2011-11-10 13:03:57

标签: 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") {

请帮我修改代码

2 个答案:

答案 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()(或任何内容)时,无法保证您将获得指定的数据量。我认为您应该做的是将所有数据提取到字符串缓冲区中,并解析该缓冲区,直到找到所需的数据为止。