网站调用smtp.gmail.com发邮件失败,报错SMTP connect() failed
解决Gmail SMTP连接失败(SMTP connect() failed)的方案
问题背景
网站使用PHPMailer通过smtp.gmail.com发送邮件,此前正常运行数月,现出现报错:Error sending message: SMTP connect() failed。主机服务商已通过telnet测试确认服务器可正常连接smtp.gmail.com的587端口,排除网络层面问题。
有效解决方案
启用TLS加密配置
Gmail的587端口要求使用STARTTLS加密,原代码未配置此项,需添加:$mail->SMTPSecure = 'tls';若尝试465端口(SSL协议),则配置为:
$mail->Port = 465; $mail->SMTPSecure = 'ssl';检查Gmail账户安全设置
- 若账户开启了两步验证(2FA),必须使用应用专用密码替代原账户密码登录SMTP,原密码会直接失效。
- 登录Google账户安全页面,检查是否存在可疑登录记录导致SMTP访问被临时封锁,需手动解除限制。
- 注意:Gmail已默认关闭“不太安全的应用访问”,非2FA账户需启用该选项(仅临时方案,优先推荐使用应用密码)。
验证账户与密码正确性
确认Username为完整的邮箱地址(admin@fanmail.biz),若为Google Workspace账户,需确保域名已完成Google验证且未被限制服务。应用密码需准确复制,避免多余空格或字符错误。更新PHPMailer至最新版本
旧版本PHPMailer可能存在TLS协议兼容性问题,通过Composer更新:composer require phpmailer/phpmailer开启调试模式排查细节
添加调试代码获取连接过程的详细日志,定位具体失败环节:$mail->SMTPDebug = 2; // 输出详细调试信息,排查完成后建议关闭检查PHP环境依赖
确认PHP已启用openssl扩展(Gmail SMTP依赖SSL/TLS加密),可通过phpinfo()查看扩展状态;同时检查allow_url_fopen是否开启,部分环境下会影响证书验证。
内容的提问来源于stack exchange,提问作者Jean-Pierre Lolivier
相关产品推荐
相关产品推荐

