如何使用php-ccurl发送SMTP请求和读取响应


How to send SMTP request and read response with php curl?

我正在尝试将smtp请求发送到安装在freebsd中的smtp服务器,并读取成功或失败响应?这是我的代码:

$url = '192.168.1.227:25/';
    $user = 'admin';
    $pass = '123';
    $params = array(
        'User'      => $user,
        'passwor'   => $pass,
        'to'        => 'example1@example.com',
        'subject'   => 'test',
        'html'      => 'body',
        'text'      => 'text',
        'from'      => 'example2@example.com',
      );

    $session = curl_init($url);
    curl_setopt ($session, CURLOPT_POST, true);
    curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
    curl_setopt($session, CURLOPT_HEADER, 1);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($session);
    $info = curl_getinfo($session);
    curl_close($session);
    echo $response;
    print_r($info);

cURL不是实现这一点的合适工具。尽管它确实支持简单的SMTP连接,但它通常不是为更高级的用例而设计的。

cURL是为HTTP设计的,在HTTP中,通常有一个带有一组参数(HTTP请求头)的请求和一个响应。cco

然而,SMTP通信更像是"乒乓球"。要实现SMTP客户端,您必须使用原始TCP套接字:在套接字上编写SMTP命令,读取/处理响应,编写下一个命令,等等

此外,SMTP,正如它目前所实现的那样,在服务器和客户端之间有很多奇怪的方面。例如,基于PHP/cURL的方法将无法支持灰名单,除非您管理自己的临时拒绝邮件队列。

除非你有充分的理由这样做(需要大量的时间,并且有很高的挫折容忍度),否则你应该使用像Swiftmailer这样的客户端库和一个真正的MTA来处理传出邮件。

另一方面,如果您只是想使用与邮件服务器的原始连接,请在命令行中使用类似netcat的工具,并了解这种场景的操作方法。

如果你离开了,请暂时把"活着"等放在一边。