如何发送SMTP请求并使用php curl读取响应?
问题描述:
我试图发送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);
答
cURL不是正确的工具。虽然它支持simple SMTP connections,但它通常不适用于更高级的用例。
卷曲设计用于HTTP,在这里通常有一堆参数的一个请求(HTTP请求头)和一个response.¹然而
SMTP通信都更喜欢“乒乓”。要实现SMTP客户端,您必须在原始TCP套接字上工作:在套接字上写入SMTP命令,读取/处理响应,写入下一个命令等等。
此外,SMTP目前已经实施,它在服务器和客户端中存在许多怪癖和奇怪的方面。例如,基于PHP/cURL的方法将无法支持灰名单,除非您将自己的队列管理为暂时拒绝的邮件。
除非你有一个很好的理由这样做(和大量的时间,以及高挫折容忍力),你应该连同发出电子邮件真正的MTA使用客户端库像Swiftmailer。
另一方面,如果您只是想玩一个与邮件服务器的原始连接,请使用命令行中的工具netcat
,并通过howto of such a scenario工作。
..
¹如果你离开保持活动等一会儿。