2014-11-01 102 views
0

我试图发送smtp请求到freebsd中安装的smtp服务器并读取成功或失败响应? 这是我的代码:如何发送SMTP请求并使用php curl读取响应?

$url = '192.168.1.227:25/'; 
    $user = 'admin'; 
    $pass = '123'; 

    $params = array(
     'User'  => $user, 
     'passwor' => $pass, 
     'to'  => '[email protected]', 
     'subject' => 'test', 
     'html'  => 'body', 
     'text'  => 'text', 
     'from'  => '[email protected]', 
    ); 


    $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); 

回答

1

cURL不是正确的工具。虽然它支持simple SMTP connections,但它通常不适用于更高级的用例。

卷曲设计用于HTTP,在这里通常有一堆参数的一个请求(HTTP请求头)和一个response.¹然而

SMTP通信都更喜欢“乒乓”。要实现SMTP客户端,您必须在原始TCP套接字上工作:在套接字上写入SMTP命令,读取/处理响应,写入下一个命令等等。

此外,SMTP目前已经实施,它在服务器和客户端中存在许多怪癖和奇怪的方面。例如,基于PHP/cURL的方法将无法支持灰名单,除非您将自己的队列管理为暂时拒绝的邮件。

除非你有一个很好的理由这样做(和大量的时间,以及高挫折容忍力),你应该连同发出电子邮件真正的MTA使用客户端库像Swiftmailer。

另一方面,如果您只是想玩一个与邮件服务器的原始连接,请使用命令行中的工具netcat,并通过howto of such a scenario工作。

..

¹如果你离开保持活动等一会儿。