使用PHPMailer发送邮件遇SMTP认证失败问题求助
解决PHPMailer连接Gmail SMTP的认证错误
看你遇到的SMTP ERROR: Password command failed: Please log in via your web browser错误,这是Gmail的安全机制在搞事情,加上你代码里还有个小拼写错误,咱们一步步来解决:
核心问题分析
Gmail默认会阻止非官方应用(比如PHPMailer)直接用账号密码登录SMTP服务器,尤其是当你没开启两步验证或者没生成专用应用密码的时候,就会触发这个“请通过浏览器登录”的提示。另外你代码里的拼写错误也会直接影响功能运行。
解决方案步骤
1. 修复代码里的拼写错误
你写的$mailer->isSTMP();是错的!正确写法是$mailer->isSMTP();(少了一个字母M),这个错误会导致PHPMailer无法切换到SMTP模式,自然没法连接Gmail的邮件服务器。
2. 配置Gmail的安全设置(关键!)
现在Gmail已经移除了“允许不太安全的应用”选项,必须通过两步验证+应用专用密码来登录:
- 先给你的Gmail账号开启两步验证(2FA):在Google账号的安全设置里找到“两步验证”,按照提示完成绑定(比如绑定手机)。
- 生成应用专用密码:开启2FA后,在安全设置里找到“应用专用密码”,选择“邮件”作为应用类型,“其他(自定义名称)”作为设备,生成一个16位的密码,这个密码就是你要在PHPMailer里填写的
Password字段,不要用你的原Gmail密码!
3. 优化代码的其他细节
- 开发环境下的
SMTPOptions可以暂时保留,但生产环境建议删除这段配置(让它默认验证SSL证书,更安全)。 - 生产环境记得把
SMTPDebug改成0,避免输出敏感的调试信息。
修正后的完整代码
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <?php require "vendor/autoload.php"; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; $developmentMode = true; $mailer = new PHPMailer($developmentMode); try { $mailer->SMTPDebug = 2; // 修复拼写错误:isSTMP -> isSMTP $mailer->isSMTP(); if ($developmentMode) { $mailer->SMTPOptions = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ] ]; } $mailer->Host = 'smtp.gmail.com'; $mailer->SMTPAuth = true; $mailer->Username = "mygmail@gmail.com"; // 替换成你生成的应用专用密码 $mailer->Password = "你的16位应用专用密码"; $mailer->SMTPSecure = 'tls'; $mailer->Port = 587; $mailer->setFrom("mygmail@gmail.com", "Izaya"); $mailer->addAddress("anothergmail@gmail.com","orihara"); $mailer->isHTML(true); $mailer->Subject = "Hey There"; $mailer->Body = "NICE TO MEET YOU IZAYA "; $mailer->send(); $mailer->ClearAllRecipients(); echo "Mail has been Sent"; } catch (Exception $e) { echo "Email Error.INFO:" . $mailer->ErrorInfo; } ?> </body> </html>
额外检查点
- 确认你的服务器能访问smtp.gmail.com的587端口,有些主机商会屏蔽这个端口,如果不行可以试试465端口(对应
SMTPSecure = 'ssl')。 - 如果还是有问题,去Google账号的“最近的安全活动”里看看有没有被拦截的登录请求,手动允许该设备的访问。
内容的提问来源于stack exchange,提问作者Izaya
相关产品推荐
相关产品推荐

