使用PHPMailer调用Gmail SMTP发送邮件时出现SMTP认证失败错误的原因及解决方法
PHPMailer 连接Gmail SMTP认证失败问题排查与解决
从你提供的错误日志来看,核心问题是Google拒绝了你的用户名和密码认证(535-5.7.8 Username and Password not accepted),结合你的操作环境和已做的设置,我整理了以下排查步骤和解决方案:
一、先修复代码中的明显错误
我注意到你代码里有两处邮箱地址拼写错误,虽然这不一定是直接导致认证失败的原因,但会影响邮件发送的合法性,先修正:
- 将
$mail->setFrom('myemail.com', 'Mailer');修改为:$mail->setFrom('myemail@gmail.com', 'Mailer'); - 将
$mail->addReplyTo('myemai@gmail.com', 'Mailer');修改为:$mail->addReplyTo('myemail@gmail.com', 'Mailer');
二、解锁Google账户的陌生设备访问限制
本地XAMPP环境的请求很可能被Google判定为"陌生设备/位置登录",从而拦截认证请求:
- 登录你的Google账户,找到「解锁验证码」相关的安全验证页面,点击允许当前设备/IP的访问请求(操作后等待1-2分钟再测试)。
三、重新确认Google账户的安全设置
即使你说已经开启了"不太安全的应用"权限,仍建议再检查一遍:
- 进入Google账户的「安全」设置页面,找到「不太安全的应用访问」选项,确保它处于开启状态。
- 如果找不到这个选项,说明你的Google账户已被强制要求使用OAuth2认证(Google逐步淘汰了"不太安全应用"的支持),这时你需要切换到PHPMailer的OAuth2认证模式,具体可以参考PHPMailer官方文档中的OAuth2配置示例。
四、尝试使用应用专用密码(可选)
如果上述方法无效,可以尝试开启双重验证后使用应用专用密码:
- 开启Google账户的双重验证功能;
- 在安全设置中创建一个「应用专用密码」(选择"邮件"应用,"其他设备"类型);
- 将代码中的
$mail->Password替换为这个生成的应用专用密码,而不是你的原账户密码。
五、检查本地环境的SSL配置
XAMPP默认的PHP可能缺少正确的CA证书,导致TLS连接验证失败:
可以临时在代码中添加SSL选项跳过验证(仅用于测试,生产环境不建议):
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );
生产环境建议下载并配置正确的CA证书到PHP的php.ini中。
按照上述步骤逐一排查,应该能解决你的认证失败问题。
内容的提问来源于stack exchange,提问作者user15336984




