使用PHPMailer调用Gmail发邮件遇SMTP认证失败求助
解决Gmail + PHPMailer认证失败的可行方案
方案1:使用应用专用密码(需开启两步验证)
- 前提:你的Gmail账户必须开启两步验证
- 生成步骤:
- 登录Google账户,进入「安全」设置
- 找到「应用专用密码」选项(仅开启两步验证后可见)
- 选择应用为「邮件」,设备选「其他(自定义名称)」(比如填「PHPMailer」)
- 生成后会得到一串16位密码,替换代码里的
Password字段即可
修改后的关键代码片段:
$mail->Username = 'lsurahman157@gmail.com'; $mail->Password = '生成的16位应用专用密码'; // 替换为实际生成的密码
方案2:启用OAuth 2.0授权(推荐,更安全)
PHPMailer原生支持OAuth 2.0,需先在Google Cloud平台配置凭据:
- 登录Google Cloud控制台,创建新项目
- 启用「Gmail API」
- 创建「OAuth客户端ID」,应用类型选「桌面应用」
- 获取客户端ID、客户端密钥,生成刷新令牌
- 修改PHPMailer配置,切换为OAuth认证
修改后的完整代码示例:
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\OAuth; require 'vendor/autoload.php'; $mail = new PHPMailer(true); try { //Server settings $mail->SMTPDebug = 2; $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; //OAuth配置 $mail->AuthType = 'XOAUTH2'; $mail->oauthUserEmail = 'lsurahman157@gmail.com'; $mail->oauthClientId = '你的客户端ID'; $mail->oauthClientSecret = '你的客户端密钥'; $mail->oauthRefreshToken = '你的刷新令牌'; //Recipients $mail->setFrom('lsurahman157@gmail.com', 'Full Name'); $mail->addAddress('aonik1@lsu.edu', 'Abdur Rahman Onik'); // Content $mail->isHTML(true); $mail->Subject = 'Subject Text'; $mail->Body = '<i>Mail body in HTML</i>'; $mail->AltBody = 'This is the plain text version of the email content'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; }
方案3:改用Google Workspace SMTP(仅企业/教育账户)
如果使用Google Workspace(原G Suite)账户,可直接使用官方SMTP服务:
- 保留现有代码结构,确保账户已在Workspace后台启用SMTP访问权限
- 密码直接使用Workspace账户密码(需确认账户未限制SMTP登录)
方案4:切换到第三方邮件服务
若上述方案不适用,可改用SendGrid、Mailgun等第三方邮件服务,它们提供更灵活的SMTP或API集成方式,不受Gmail的安全限制。
内容的提问来源于stack exchange,提问作者Abdur Rahman
相关产品推荐
相关产品推荐

