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

使用Nodemailer通过POST请求调用Gmail时出现EAUTH认证错误

解决Nodemailer搭配Gmail的EAUTH认证错误

核心问题排查与修复步骤

  • 确认应用专用密码正确性:开启2FA后,Gmail不再支持用普通登录密码或2FA密钥做SMTP认证,必须使用专门生成的应用专用密码。请确保privateKeys.gmailKey的值是你在Google账号中生成的16位无空格应用专用密码。
  • 修正from字段配置:Gmail的SMTP服务不允许随意将from设为第三方邮箱(即用户提交的emailAddress),这会触发权限拦截。正确做法是将from设为你的Gmail账号,同时通过replyTo字段设置用户邮箱,方便后续回复。
  • 简化Transporter配置:指定service: 'gmail'时,Nodemailer会自动加载Gmail的SMTP默认参数(host、port、secure无需手动设置),手动配置反而可能引发冲突。
  • 检查账号安全限制:登录你的Gmail账号,确认是否有未处理的安全提示(比如Google标记了陌生设备的登录尝试),需手动确认该登录合法。

修正后的代码示例

const nodemailer = require('nodemailer')

// 简化Transporter配置
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: "你的gmail账号@gmail.com",
    pass: "你的应用专用密码", // 确保此处为应用专用密码
  },
});

app.post('/email', async (req, res) => {
  try {
    const { emailName, emailAddress, emailContent } = req.body;
    
    const mailOptions = {
      from: "你的gmail账号@gmail.com", // 必须使用你的Gmail账号
      replyTo: emailAddress, // 设置回复地址为用户邮箱
      to: "你的gmail账号@gmail.com",
      subject: `来自${emailName}的消息`,
      text: `发送人邮箱:${emailAddress}\n\n内容:${emailContent}`, // 在邮件内容中带上用户邮箱和消息
    };

    await transporter.sendMail(mailOptions);
    res.status(200).send("邮件发送成功!");
  } catch (error) {
    console.error("发送邮件出错:", error);
    res.status(500).send("邮件发送失败。");
  }
});

补充说明

  • 关于“不太安全的应用”选项:开启2FA后,该选项会自动隐藏且失效,无需寻找。
  • 若仍报错,可尝试删除现有应用专用密码,重新生成新的再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:33:16