本地运行正常,服务器部署后SMTP证书不匹配错误求助
故障原因分析
从调试日志能明确看到两个核心异常:
- 代码配置的SMTP端口是587,但实际发起的连接却是
smtp.gmail.com:25 - 连接成功后返回的是服务器
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
相关产品推荐
相关产品推荐

