使用PHP应用密码无法访问Gmail SMTP客户端,如何解决认证失败问题
解决PHPMailer通过Gmail SMTP发送邮件的535认证错误
问题代码
use PHPMailer\PHPMailer\PHPMailer; require 'vendor\autoload.php'; define('GMailUSER', 'gigabattleboard@gmail.com'); define('GMailPWD', '****************'); function smtpMailer($to, $from, $from_name, $subject, $body) { $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 1; $mail->SMTPAuth = true; $mail->SMTPSecure = 'ssl'; $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); $mail->Host = 'smtp.gmail.com'; $mail->Port = 465; $mail->Username = GMailUser; $mail->Password = GMailPWD; $mail->SetFrom($from, $from_name); $mail->Subject = $subject; $mail->Body = $body; $mail->AddAddress($to); if(!$mail->Send()) { return 'Mail error: '.$mail->ErrorInfo; } else { return true; } } $result = smtpmailer('fainfutia@mail.com', 'gigabattleboard@mail.com', 'Giga Battleboard', 'Message', 'Subject'); if (true !== $result) { echo $result; }
错误信息
2023-01-13 14:21:05 SMTP ERROR: Password command failed: 535-5.7.8 Username and Password not accepted. Learn more at535 5.7.8 https://support.google.com/mail/?p=BadCredentials s23-20020a1cf217000000b003d1e3b1624dsm29449744wmc.2 - gsmtp
SMTP Error: Could not authenticate.
解决步骤
- 修正变量大小写错误:代码中定义的常量是
GMailUSER(大写USER),但调用时写成了GMailUser(小写User),这会导致无法读取正确的用户名,修改为:$mail->Username = GMailUSER; - 确认应用密码正确性:确保使用的是为启用2FA的Gmail账号生成的16位无空格应用密码,生成时选择「邮件」应用类型,不要添加任何额外字符或空格。
- 统一发件人与SMTP用户名:Gmail要求发件人邮箱必须和SMTP认证的邮箱一致,代码中
SetFrom使用的gigabattleboard@mail.com与SMTP用户名gigabattleboard@gmail.com不符,修改为:$mail->SetFrom(GMailUSER, $from_name); - 优化SMTP配置:推荐使用
tls加密和587端口,这是Gmail更推荐的SMTP配置,同时移除不安全的SSL验证禁用代码:$mail->SMTPSecure = 'tls'; $mail->Port = 587; // 移除以下SMTPOptions配置 // $mail->SMTPOptions = array(...); - 检查账号IMAP权限:登录Gmail账号,进入「设置-转发和POP/IMAP」,确认「IMAP访问」已启用,这有助于SMTP服务正常工作。
内容的提问来源于stack exchange,提问作者FoxBall
相关产品推荐
相关产品推荐

