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

使用Nodemailer发送Gmail时遭遇连接及认证错误求助

Nodemailer发送Gmail邮件报错解决指南

问题与错误分析

你当前的代码存在配置错误,导致出现两个典型问题:

错误1:本地连接被拒绝

Error: connect ECONNREFUSED 127.0.0.1:587
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) {
errno: -4078,
code: 'ESOCKET',
syscall: 'connect',
address: '127.0.0.1',
port: 587,
command: 'CONN'
}

原因:代码里使用了source: 'gmail'这个无效参数,Nodemailer无法识别Gmail的SMTP配置,默认尝试连接本地SMTP服务器(127.0.0.1:587),而本地未运行SMTP服务,因此连接被拒绝。

错误2:认证失败

修改host为拼写错误的spmt-gmail.com后出现:

Error: Invalid login: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8  https://support.google.com/mail/?p=BadCredentials je10-20020a170903264a00b001bc2831e1a9sm268100plb.90 - gsmtp
    at SMTPConnection._formatError (C:\Users\anshul\Desktop\full stack expense tracker\node_modules\nodemailer\lib\smtp-connection\index.js:790:19)
    at SMTPConnection._actionAUTHComplete (C:\Users\anshul\Desktop\full stack expense tracker\node_modules\nodemailer\lib\smtp-connection\index.js:1564:34)   
    at SMTPConnection.<anonymous> (C:\Users\anshul\Desktop\full stack expense tracker\node_modules\nodemailer\lib\smtp-connection\index.js:546:26)
    at SMTPConnection._processResponse (C:\Users\anshul\Desktop\full stack expense tracker\node_modules\nodemailer\lib\smtp-connection\index.js:969:20)       
    at SMTPConnection._onData (C:\Users\anshul\Desktop\full stack expense tracker\node_modules\nodemailer\lib\smtp-connection\index.js:755:14)
    at SMTPConnection._onSocketData (C:\Users\anshul\Desktop\full stack expense tracker\node_modules\nodemailer\lib\smtp-connection\index.js:193:44)
    at TLSSocket.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:324:12)
    at readableAddChunk (node:internal/streams/readable:297:9)
    at Readable.push (node:internal/streams/readable:234:10)
    at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23) {
  code: 'EAUTH',
  response: '535-5.7.8 Username and Password not accepted. Learn more at\n' +
    '535 5.7.8  https://support.google.com/mail/?p=BadCredentials je10-20020a170903264a00b001bc2831e1a9sm268100plb.90 - gsmtp',
  responseCode: 535,
  command: 'AUTH PLAIN'
}

原因:1. SMTP地址拼写错误(正确应为smtp.gmail.com而非spmt-gmail.com);2. 可能存在应用密码配置或环境变量加载异常。

分步解决方案

1. 修正Nodemailer的Gmail配置

替换无效的source参数,改用正确的配置方式:

方式一:使用预设Gmail服务(推荐)

Nodemailer内置了Gmail的SMTP配置,直接使用service: 'gmail'即可:

const transporter = nodemailer.createTransport({
  service: 'gmail', // 替换source为service
  auth: {
    user: process.env.EMAIL,
    pass: process.env.EMAIL_PASSWORD
  }
});

方式二:手动配置SMTP参数

如果需要自定义配置,手动指定正确的SMTP地址、端口和安全设置:

const transporter = nodemailer.createTransport({
  host: 'smtp.gmail.com', // 正确的Gmail SMTP服务器地址
  port: 587,
  secure: false, // 587端口用TLS,设为false;若用465端口则设为true
  auth: {
    user: process.env.EMAIL,
    pass: process.env.EMAIL_PASSWORD
  }
});

2. 确保应用密码与环境变量正确

  • 验证应用密码有效性:
    • 你的Google账号必须开启两步验证才能生成应用密码
    • 应用密码是Google生成的16位字符串,不是你的账号登录密码,确认复制时无空格或遗漏
  • 检查环境变量:
    • 在代码中临时添加console.log(process.env.EMAIL, process.env.EMAIL_PASSWORD),确认变量值是否正确加载
    • 确保环境变量文件(如.env)路径正确,且已通过dotenv等工具加载

最终可运行代码示例

const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: process.env.EMAIL,
    pass: process.env.EMAIL_PASSWORD
  }
});

const mailoptions = {
  from: `Anshul kumar <${process.env.EMAIL}>`,
  to: Email,
  subject: "重置你的密码",
  text: "你好,欢迎使用",
  html: `<a href="http://localhost:5000/password/resetpassword/${newid}">点击此链接重置你的密码</a>`,
};

transporter.sendMail(mailoptions, (error, info) => {
  if (error) {
    console.error(error);
    res.status(500).json({ message: "无法发送邮件", success: false });
  } else {
    res.status(200).json({ message: "邮件发送成功", success: true });
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:55:54