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

本地运行正常,服务器部署后SMTP证书不匹配错误求助

故障原因分析

从调试日志能明确看到两个核心异常:

  1. 代码配置的SMTP端口是587,但实际发起的连接却是smtp.gmail.com:25
  2. 连接成功后返回的是服务器odin.idserverhost.com的SMTP响应,而非Gmail官方SMTP服务的响应

这说明你的服务器服务商对出站SMTP流量做了透明劫持——所有外部SMTP请求被强制转发到了服务商自己的邮件服务器,导致PHPMailer验证Gmail证书时,实际拿到的是服务商服务器的证书,从而触发CN(通用名称)不匹配的错误。和PHPMailer版本无关。

解决方案

1. 强制指定端口与加密方式,尝试切换Gmail端口

修改代码,明确配置加密规则和端口,避免环境自动替换参数:

// 保留原有配置,新增/调整以下内容
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 明确指定STARTTLS加密
$mail->Port = 587;
$mail->SMTPAutoTLS = true; // 确保自动TLS功能启用

// 若上述配置仍失败,切换到SSL端口465尝试
// $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
// $mail->Port = 465;

2. 测试服务器SMTP连通性

在服务器终端执行以下命令,验证是否能正常连接Gmail官方SMTP:

# 测试587端口
telnet smtp.gmail.com 587
# 测试465端口
openssl s_client -connect smtp.gmail.com:465

如果返回的响应开头不是220 smtp.gmail.com ESMTP ...,而是服务商服务器的内容,说明流量确实被劫持。此时只能改用服务商提供的内部SMTP服务器发送邮件,联系服务商获取对应的SMTP地址、账号和密码。

3. 验证Gmail账号配置(补充检查)

确保你的Gmail账号已开启SMTP服务,若开启了两步验证,需使用应用专用密码填写到代码的Password字段中,Username填写完整的Gmail邮箱地址。

内容的提问来源于stack exchange,提问作者Ja'far Shodiq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:09:57