首页 >后端开发 >php教程 >为什么我的电子邮件客户端工作时,我的 PHPMailer 代码无法连接到 SMTP 主机?

为什么我的电子邮件客户端工作时,我的 PHPMailer 代码无法连接到 SMTP 主机?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-02 12:22:10217浏览

Why Does My PHPMailer Code Fail to Connect to the SMTP Host, While My Email Client Works?

克服 PHPMailer 的“SMTP 错误:无法连接到 SMTP 主机”障碍

PHPMailer,一个流行的 PHP 邮件发送库,有时会抛出错误“SMTP 错误:无法连接到 SMTP 主机。”尽管通过 Thunderbird 等电子邮件客户端成功发送电子邮件,但仍可能遇到此问题。

要进行故障排除,请检查工作 Thunderbird 配置中使用的设置并将其与 PHPMailer 使用的设置进行比较。下表突出显示了主要差异:

Setting Thunderbird PHPMailer
Server Name mail.exampleserver.com SMTP_HOST
Port 587 SMTP_PORT
Username [email protected] SMTP_USER
Secure Authentication No SMTPAuth
Connection Security STARTTLS Not specified

提供的 PHPMailer 代码:

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = SMTP_HOST;
$mail->Port = SMTP_PORT;
$mail->SMTPAuth = true;
$mail->Username = SMTP_USER;
$mail->Password = SMTP_PASSWORD;
$mail->From = MAIL_SYSTEM;
$mail->FromName = MAIL_SYSTEM_NAME;
$mail->AddAddress($aSecuredGetRequest['email']);
$mail->IsHTML(true);

虽然这些设置看起来与工作 Thunderbird 配置类似,但主要区别在于缺少PHPMailer 代码中的连接安全规范。要解决此问题,请将以下行添加到 PHPMailer 脚本中:

$mail->SMTPSecure = 'STARTTLS';

此行指定与 SMTP 服务器的连接应使用 STARTTLS 加密。完成此调整后,您的 PHPMailer 脚本应该可以成功发送电子邮件。

注意:如果您在使用 PHPMailer 5.6 或更高版本时遇到与证书验证失败相关的错误,您可以实施以下解决方法:

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

请记住,此解决方法应该是临时措施,您应该通过替换无效证书来解决基础证书问题有有效的。

以上是为什么我的电子邮件客户端工作时,我的 PHPMailer 代码无法连接到 SMTP 主机?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn