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

谷歌停用低安全应用访问后如何用Nodemailer对接Gmail发信

问题背景

谷歌已全面停用所有Gmail账号的「Less secure app access(低安全应用访问)」权限,新注册Gmail账号无该权限的开启入口,原有直接使用账号登录密码对接Nodemailer发信的代码会出现鉴权失败问题。
谷歌低安全应用访问停用提示页

最低成本解决方案:2步验证+应用专用密码

该方案不需要大幅改动现有Nodemailer代码,个人Gmail账号可直接配置,稳定性和官方原生账号密码鉴权一致。

配置步骤

  • 开启账号2步验证
    登录对应Gmail账号,进入谷歌账号管理的「安全性」板块,在「登录Google」分类下找到「2步验证」入口,按照页面指引完成手机号校验、备用验证方式配置,正式开启2步验证。
    注意:新注册Gmail账号存在默认风控期,若找不到2步验证入口或开启时报错,先完成手机号、备用邮箱绑定,等待24小时风控解除后再操作即可。
  • 生成应用专用密码
    2步验证开启成功后,「安全性」板块会显示「应用专用密码」入口(原低安全应用访问的位置)。进入该页面,在应用选择下拉框中选择「其他(自定义名称)」,输入自定义标识例如Nodemailer发信服务后点击生成,页面会弹出16位长度的应用专用密码,第一时间复制保存,关闭弹窗后谷歌不会二次展示该密码。
  • 修改Nodemailer配置
    原有代码逻辑不需要调整,仅需要把auth.pass字段的原有账号登录密码,替换为刚才生成的16位应用专用密码即可,密码字符串里的空格可以直接删除,不影响鉴权。修正后的可运行代码如下:
const nodemailer = require('nodemailer')
let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
      user: "myemail@gmail.com", // 替换为你的发信Gmail地址
      pass: "xxxxxxxxxxxxxxxx", // 替换为你生成的16位应用专用密码,不要填原账号密码
    },
  });
  
  let mailOptions = {
    from: 'myemail@gmail.com', // from地址必须和上面auth.user的邮箱完全一致,否则会被拦截
    to: "akabir247@gmail.com",
    subject: `The subject goes here`,
    html: `The body of the email goes here in HTML`,
    
  };
  
  transporter.sendMail(mailOptions, function (err, info) {
    if (err) {
     console.log(err)
    } else {
      console.log(info)
    }
  });

常见问题排查

  • 报535鉴权错误:先确认2步验证已经正式生效(部分账号开启后需要等待10-15分钟权限同步),重新生成新的应用专用密码替换旧密码即可,不要使用账号原登录密码
  • 发信被拦截:检查mailOptions.from字段是否和auth.user配置的邮箱完全一致,不要填其他地址作为发件人
  • 找不到应用专用密码入口:确认账号不是谷歌Workspace企业账号,企业账号需要管理员在管理后台开启「允许用户使用应用专用密码」的权限后,用户端才会显示对应入口
备选方案(适合复杂业务场景)

如果业务场景不适合开启2步验证,可以改用官方Gmail API配合OAuth2.0鉴权对接Nodemailer,该方案不需要使用密码,安全性更高,但配置流程需要在谷歌云控制台创建项目、申请Gmail发信权限、获取clientId/refreshToken等参数,配置成本远高于应用专用密码方案,个人非商用场景不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:00:36