PHPMailer出现SMTP connect() failed错误该如何修复?
PHPMailer SMTP连接失败修复方案
通用排查项
- 开启调试日志定位问题:在服务配置区域添加代码
$mail->SMTPDebug = 3;,可输出完整的SMTP交互日志,快速定位是网络问题、认证问题还是端口封禁问题 - 检查服务器端口连通性:多数云服务器、虚拟主机会默认封禁465/587 SMTP端口,登录服务器后执行命令
telnet smtp.gmail.com 465测试连通性,连接失败需联系服务商解封端口,或更换邮箱服务商支持的其他端口 - 确认PHP扩展依赖:确保PHP已开启
openssl扩展,否则无法支持SMTPS/STARTTLS加密传输 - 禁止使用账号登录密码作为SMTP密码:当前主流邮箱均不再支持直接用账号登录密码调用SMTP接口,必须使用专属应用密码
各邮箱专属配置
Gmail配置
- 2022年起Gmail不再支持普通账号的密码登录SMTP,必须先开启账号的两步验证,之后生成应用专用密码,把生成的16位应用密码填入
$mail->Password参数 - 加密与端口对应规则:使用
PHPMailer::ENCRYPTION_SMTPS加密方式对应465端口,使用PHPMailer::ENCRYPTION_STARTTLS加密方式对应587端口,二者不可混用 - 若你的服务器部署在中国大陆地区,受网络限制无法直接连接Gmail SMTP服务器,建议更换为国内邮箱服务或部署在海外服务器
- 正确配置片段参考:
$mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = '你的Gmail完整地址'; $mail->Password = '你生成的16位应用专用密码'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465;
Yahoo邮箱配置
- 需先开启账号的两步验证,之后生成专属应用密码,不可使用账号登录密码
- SMTP服务器地址为
smtp.mail.yahoo.com - 加密与端口对应规则:SMTPS对应465端口,STARTTLS对应587端口
- 发件人地址必须和你登录的Yahoo邮箱地址完全一致,否则会被判定为伪造发件人拦截
其他邮箱通用规则
- 腾讯QQ邮箱、网易163邮箱等国内公共邮箱,均需要先开启账号两步验证,生成专属应用密码后调用SMTP接口
- 企业邮箱优先参考服务商提供的SMTP配置文档,确认加密方式和端口对应关系,部分企业邮箱会使用自定义端口
内容的提问来源于stack exchange,提问作者user173819
相关产品推荐
相关产品推荐

