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"); });
配置文件参考
故障原因与解决步骤
这个错误属于Gmail侧的安全拦截,和业务代码逻辑无关,按以下顺序排查即可:
- 原因1:使用账号原密码登录SMTP被Gmail拦截
2022年Gmail已全面下线全局低安全性应用访问权限,第三方客户端直接使用账号明文密码登录SMTP会被直接拒绝,这也是功能之前可用、现在突然报错的核心原因。
解决方式:- 给对应Gmail账号开启两步验证,未开启两步验证的账号无法生成应用专用密码
- 在Google账号安全设置中找到「应用专用密码」入口,选择应用类型为「邮件」、设备为当前部署服务的对应设备,生成16位应用专用密码
- 将.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=trueconfig/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
相关产品推荐
相关产品推荐

