PHPMailer: SMTP 错误: 无法连接到 SMTP 主机

2022-08-30 09:48:38

我已经在几个项目中使用过PHPMailer,但现在我被困住了。它给我错误:
SMTP错误:无法连接到SMTP主机。
我尝试过从雷鸟发送电子邮件,它的工作原理!但不是通过PHPMailer...以下是 Thunderbird 的设置:

服务器名称:mail.exampleserver.com
端口:587
用户名:user@exampleserver.com
安全身份验证:无
连接 安全性:STARTTLS

我已经将这些与我在使用PHPMailer的最后一个项目中的服务器进行了比较,它们是:

服务器名称:mail.exampleserver2.com
端口:465
用户名:user@exampleserver2.com
安全身份验证:无
连接 安全性:SSL/TLS

我的php代码是:

 $mail = new PHPMailer();
 $mail->IsSMTP(); // send via SMTP
 $mail->Host = SMTP_HOST; // SMTP servers
 $mail->Port = SMTP_PORT; // SMTP servers
 $mail->SMTPAuth = true; // turn on SMTP authentication
 $mail->Username = SMTP_USER; // SMTP username
 $mail->Password = SMTP_PASSWORD; // SMTP password
 $mail->From = MAIL_SYSTEM;
 $mail->FromName = MAIL_SYSTEM_NAME;
 $mail->AddAddress($aSecuredGetRequest['email']);
 $mail->IsHTML(true); // send as HTML

我错在哪里?


答案 1

由于这个问题在谷歌中很高,我想在这里分享我的解决方案,用于PHP刚刚升级到5.6版本(具有更严格的SSL行为)。

PHPMailer wiki 有一个关于此的部分:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

建议的解决方法是包括以下代码段:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

这应该适用于PHPMailer 5.2.10(及更高版本)。

注意:显然,正如该wiki所建议的那样,这应该是一个临时解决方案!

解决此问题的正确方法是将无效、配置错误或自签名的证书替换为一个好的证书。


答案 2

在我的情况下,PHP中缺乏SSL支持导致了这个错误。

所以我启用了扩展名=php_openssl.dll

$mail->SMTPDebug = 1;也暗示了这个解决方案。

2017 年更新

$mail->SMTPDebug = 2;,请参见:https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output


推荐