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

如何在Node.js中使用Nodemailer通过Gmail发送邮件

问题原因

Google已正式下线Gmail账户中「允许低安全性应用访问」的配置开关,直接使用账号登录明文密码通过Nodemailer调用Gmail SMTP发信的请求,会被安全系统判定为低安全性应用访问直接拦截,这是现有代码无法正常发信的核心原因。

解决步骤
  • 开启Gmail账户两步验证
    这是生成应用专用密码的强制前置条件。注意:没有开启两步验证的账号,安全设置页不会展示应用专用密码的生成选项,不要浪费时间在未开两步验证的账号里找对应入口。直接进入Gmail账户的安全设置页,按照页面引导完成手机校验等步骤即可开启。
  • 生成应用专用密码
    两步验证开启完成后,在同一安全设置页找到「应用专用密码」配置项,应用类型选择「邮件」,设备选项选择当前运行Node.js服务的对应设备,确认后会生成一串16位长度的授权密码,这串密码仅用于第三方邮件客户端登录,不会替代你的账号原登录密码。
  • 调整代码配置
    将Nodemailer配置中auth字段下的pass值,替换为上一步生成的16位应用专用密码即可,其余配置无需改动,调整后的参考代码如下:
const nodemailer = require('nodemailer');

let mailTransporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'xyz@gmail.com',
        // 这里替换为你生成的16位应用专用密码,不要填原账号登录密码
        pass: '你的16位应用专用密码'
    }
});

let mailDetails = {
    from: 'xyz@gmail.com',
    to: 'abc@gmail.com',
    subject: 'Test mail',
    text: 'Node.js testing mail for GeeksforGeeks'
};

mailTransporter.sendMail(mailDetails, function(err, data) {
    if(err) {
        // 建议打印完整err信息方便定位具体问题
        console.log('Error Occurs', err);
    } else {
        console.log('Email sent successfully');
    }
});
常见问题排查
  • 替换密码后仍报鉴权错误:先确认生成应用专用密码时选择的应用类型为「邮件」,类型选错会导致鉴权失败;同时检查复制的16位密码是否带有前后空格、漏写字符。
  • 报网络连接超时:先确认当前运行环境可以正常连通Gmail的SMTP服务,国内网络环境下经常会出现跨境网络拦截导致连接失败的问题。
  • 短时间发信后被拦截:Gmail对个人账号的SMTP发信有频率限制,短时间发送大量邮件会触发临时风控,暂停发信等待1小时左右即可恢复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:42:14