You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHPMailer结合Gmail应用密码发邮件仍遇认证失败求助

解决Gmail应用密码搭配PHPMailer的认证失败问题

针对你遇到的SMTP Error: Could not authenticate错误,按以下步骤逐一排查:

  • 确认应用密码有效性
    必须使用Gmail账号开启两步验证后生成的16位无空格应用专用密码,不能用普通账号密码,也不能修改生成的密码(比如删减字符)。生成时建议选择“邮件”类别,或“其他(自定义名称)”。

  • 检查账号核心设置
    确保你的Gmail账号已开启两步验证,这是生成应用密码的前提;Gmail已移除“不太安全的应用访问”选项,无需再关注该设置。

  • 调整PHPMailer配置并开启调试

    1. 将$mail->SMTPDebug = 0;改为$mail->SMTPDebug = 2;,输出完整SMTP交互日志,精准定位认证失败的具体原因(如密码错误、服务器返回的错误码)。
    2. 尝试切换到TLS加密方式,部分环境下SSL存在兼容性问题:
      $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
      $mail->Port       = 587;
      
    3. 再次核对Username是否为完整Gmail邮箱地址,确保无拼写错误。
  • 服务器环境排查

    • 确认服务器未屏蔽465/587端口,部分主机商会限制对外连接这些SMTP端口,需联系主机商确认放行。
    • 检查PHP的openssl扩展是否启用,SSL/TLS加密依赖该扩展,可通过phpinfo()查看状态。

修改后的示例代码(开启调试+TLS配置):

<?php
$username = 'myemail@gmail.com';
$password = '你的16位应用密码';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

require 'PHPMailer/Exception.php';
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/SMTP.php';

function sendemailforAccount($email, $subject, $body, $attachmentPath = "", $attachmentName = ""){
    global $username;
    global $password;
    $mail = new PHPMailer(true);

    try {
        //Server settings
        $mail->SMTPDebug = 2; // 开启详细调试
        $mail->isSMTP();
        $mail->Host       = 'smtp.gmail.com';
        $mail->SMTPAuth   = true;
        $mail->Username   = $username;
        $mail->Password   = $password;
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 改用TLS
        $mail->Port       = 587; // 对应TLS端口
        $mail->CharSet = "UTF-8";
        
        //Recipients
        $mail->setFrom('myemail@gmail.com', '');
        $mail->addAddress($email);
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body    = $body;
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
        
        if($attachmentPath != "" && $attachmentName != ""){
            $mail->addAttachment($attachmentPath, $attachmentName);
        }
        
        $mail->send();
        return true;
    } catch (Exception $e) {
        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
    }
    return false;
}
?>

内容的提问来源于stack exchange,提问作者Nguyen Van Dai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:07:04