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

AdonisJS使用@adonisjs/mail发送邮件报535无效登录错误

AdonisJS 4.1 Gmail SMTP 535认证错误排查方案

运行环境

  • 框架版本:AdonisJS 4.1.0
  • 邮件依赖:@adonisjs/mail@^3.0.10
  • 问题表现:邮件发送功能此前可正常使用,确认账号密码填写正确的前提下,发送时抛出认证失败错误

报错原文:ExceptionHandler Invalid login: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 p=BadCredentials 136-20020a62188e000000b0050dc7628158sm4991712pfy.50 - gsmtp

现有配置信息

.env 邮件相关配置

MAIL_USERNAME=test@gmail.com
MAIL_PASSWORD=testpw
SMTP_HOST=smtp.gmail.com

邮件发送逻辑代码

const data = `<div>Testing</div>`;
await Mail.raw(data, (message) => {
  message.to(getEmail.email);
  message
    .from(`${Env.get("MAIL_USERNAME")}`)
    .subject("Test Email Sending");
});

配置文件参考

config/mail.js 配置截图

故障原因与解决步骤

这个错误属于Gmail侧的安全拦截,和业务代码逻辑无关,按以下顺序排查即可:

  • 原因1:使用账号原密码登录SMTP被Gmail拦截
    2022年Gmail已全面下线全局低安全性应用访问权限,第三方客户端直接使用账号明文密码登录SMTP会被直接拒绝,这也是功能之前可用、现在突然报错的核心原因。
    解决方式:
    1. 给对应Gmail账号开启两步验证,未开启两步验证的账号无法生成应用专用密码
    2. 在Google账号安全设置中找到「应用专用密码」入口,选择应用类型为「邮件」、设备为当前部署服务的对应设备,生成16位应用专用密码
    3. 将.env文件中MAIL_PASSWORD的值替换为该16位密码(不要输入密码生成时显示的分隔空格),保存后重启Adonis服务再测试
  • 原因2:SMTP必填配置项缺失
    当前.env仅配置了主机、账号、密码,缺少Gmail SMTP强制要求的端口、加密协议参数,补全.env配置:
    MAIL_USERNAME=你的Gmail完整账号
    MAIL_PASSWORD=生成的16位应用专用密码
    SMTP_HOST=smtp.gmail.com
    SMTP_PORT=465
    SMTP_SECURE=true
    
    同时确认config/mail.js中smtp驱动配置正确读取上述环境变量,参考配置:
    smtp: {
      driver: 'smtp',
      host: Env.get('SMTP_HOST', 'smtp.gmail.com'),
      port: Env.get('SMTP_PORT', 465),
      secure: Env.get('SMTP_SECURE', true),
      auth: {
        user: Env.get('MAIL_USERNAME'),
        pass: Env.get('MAIL_PASSWORD')
      }
    }
    
  • 原因3:登录行为触发Gmail风控
    如果替换应用专用密码后仍然报错,登录对应Gmail账号查看安全提醒,找到对应SMTP登录拦截记录,手动标记为本人操作,等待10分钟左右再重试即可。

内容的提问来源于stack exchange,提问作者atjab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:30:52