You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决PHPMailer连接SMTP时的证书CN不匹配错误?

问题描述

我正尝试在GoDaddy VPS上使用PHPMailer类发送邮件,但遇到如下错误:

注:VPS与SMTP邮件服务来自不同服务商,类似通过Gmail发邮件的场景,但我用的是其他SMTP服务商。
若注释掉$mail->isSMTP()代码行,邮件能通过服务器的sendmail程序发送,但这不是我想要的SMTP方式。

SMTP响应错误信息

2023-03-31 02:18:42 SERVER -> CLIENT: 220 TLS go ahead
SMTP Error: Could not connect to SMTP host. Connection failed. stream_socket_enable_crypto(): Peer certificate CN=`ns1.tbrjar.com' did not match expected CN=`smtp.tbrjar.com'

我的代码

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->SMTPDebug = 2; // 0 = 关闭(生产环境用)- 1 = 客户端消息 - 2 = 客户端和服务器消息
$mail->Host = "smtp.tbrjar.com"; // 若网络不支持IPv6,可使用$mail->Host = gethostbyname('smtp.gmail.com');
$mail->Port = 587; // 仅TLS
$mail->SMTPSecure = 'tls'; // ssl已废弃
$mail->SMTPAuth = true;
$mail->Username = $smtpUser;
$mail->Password = $smtpPass;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test body"); // 可替换为$mail->msgHTML(file_get_contents('contents.html'), __DIR__); 从外部文件读取HTML邮件内容,转换引用图片为嵌入式
$mail->AltBody = 'HTML messaging not supported';
// $mail->addAttachment('images/phpmailer_mini.png'); // 附加图片文件

if(!$mail->send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
}else{
    echo "Message sent!";
}
解决方案

这个错误核心是SMTP服务器返回的SSL证书域名和你指定的Host域名不匹配——你连接的是smtp.tbrjar.com,但证书绑定的域名是ns1.tbrjar.com,导致TLS握手失败。可按以下步骤处理:

  • 核对SMTP服务器地址
    先确认SMTP服务商提供的服务器地址是否正确,有可能是服务商配置错误或你记错了地址。可以在VPS上执行nslookup smtp.tbrjar.com查看解析IP,对比ns1.tbrjar.com的IP,如果两者一致,说明服务商把SMTP服务挂在了NS域名上,直接把代码里的$mail->Host改成ns1.tbrjar.com即可。

  • 临时关闭证书验证(仅测试用)
    如果只是临时测试,或服务商暂时无法修正证书问题,可在代码中添加以下行关闭证书验证:

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

    注意:生产环境禁用此操作,会带来安全风险。

  • 联系SMTP服务商修正配置
    最根本的解决办法是联系你的SMTP服务商,告知他们证书域名与SMTP服务域名不匹配的问题,让他们调整SSL证书绑定域名或修正SMTP解析配置。

  • 检查GoDaddy VPS网络限制
    部分VPS服务商可能限制出站SMTP流量(尤其是587、465端口),可在VPS上执行telnet smtp.tbrjar.com 587测试连通性,若无法连接,需联系GoDaddy解除限制。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:13:14