我正在尝试将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
的工具,并了解这种场景的操作方法。
如果你离开了,请暂时把"活着"等放在一边。