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

Node.js Express中使用Nodemailer发Gmail邮件报535认证错误

Nodemailer对接Gmail SMTP报535认证错误解决方案

问题成因

触发这个报错有三个直接原因:

  • 旧版谷歌账号「低安全性应用访问权限」入口2022年已全量下线,直接使用账号登录密码做SMTP认证的方案完全失效
  • 代码中SMTP认证的user字段未填写完整邮箱地址,仅写了邮箱前缀
  • 发信配置中from字段直接使用表单提交的用户邮箱,触发Gmail发件人身份校验拦截,Gmail不允许使用未完成认证的第三方邮箱作为发件人

操作步骤

  1. 开启谷歌账号两步验证
    进入谷歌账号安全设置页,找到「两步验证」选项,按照提示完成手机号或身份验证器绑定,必须先开启两步验证才能生成后续需要的应用专用密码。
  2. 生成应用专用密码
    两步验证开启成功后,在同一安全设置页找到「应用专用密码」入口,应用类型选择「邮件」,设备选择当前使用的开发设备,点击生成后会得到一串16位长度的随机密码,复制保存好,这个密码只会展示一次。
  3. 修正SMTP传输器配置
    替换原有transporter配置,注意user填写完整邮箱地址,pass填写刚才生成的16位应用专用密码,不要填原账号登录密码:
const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'tr8622043@gmail.com',
        pass: '你复制的16位应用专用密码'
    }
});
  1. 修正发件人配置
    from字段必须和SMTP认证用的邮箱保持一致,用户提交的联系邮箱可以放到replyTo字段,不影响后续直接回复用户邮件,修正后的mailOptions参考:
const mailOptions = {
    from: 'tr8622043@gmail.com',
    replyTo: req.body.email,
    to: 'tr8622043@gmail.com',
    subject: `Message from ${req.body.email} : ${req.body.subject} `,
    text: req.body.message
}

避坑提示

  • 本地开发环境如果挂了网络代理,需要额外给transporter配置代理参数,否则会出现SMTP连接超时问题
  • 应用专用密码如果遗失不需要找回,直接在谷歌账号安全页删除旧的应用密码,重新生成新的即可
  • 不要把邮箱地址、应用专用密码硬编码在业务代码中,建议存到环境变量里,避免提交到代码仓库造成凭证泄露

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:27:26