NodeJS中Nodemailer报Error: connect ECONNREFUSED 127.0.0.1:587求助
问题:Nodemailer连接SMTP时出现ECONNREFUSED错误
我尝试在用户注册后通过Nodemailer发送邮件,已在谷歌设置中开启IMAP,创建了应用专用密码,且通过SMTP测试工具验证配置可用,但自己的Node.js服务连接时出现如下报错:
Error: connect ECONNREFUSED 127.0.0.1:587
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
errno: -111,
code: 'ESOCKET',
syscall: 'connect',
address: '127.0.0.1',
port: 587,
command: 'CONN'
}
我的mail-service代码如下:
import nodemailer from "nodemailer"; class MailService { constructor() { this.transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: process.env.SMTP_PORT, secure: false, auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASSWORD, }, }); } async sendActicvationMail(to, link) { await this.transporter.sendMail({ from: process.env.SMTP_USER, to, subject: "Mail activation " + process.env.API_URl, text: "", html: ` <div> <h1>For activation click on link</h1> <a href="${link}">Click here !</a> </div> `, }); } } export default new MailService();
请问我可能哪里出错了?谢谢!
问题排查与解决方法
环境变量未正确加载:报错显示连接本地地址
127.0.0.1:587,说明process.env.SMTP_HOST和process.env.SMTP_PORT未读取到谷歌SMTP的正确配置(谷歌SMTP主机应为smtp.gmail.com,端口587)。检查:.env文件是否存在于项目根目录- 是否在代码顶部引入
dotenv并调用dotenv.config()(如果使用该包加载环境变量) - 启动服务时是否通过命令行正确传入环境变量
环境变量配置错误:确认
.env文件中:SMTP_HOST=smtp.gmail.comSMTP_PORT=587
若变量名拼写错误(比如SMTP_HOS)或值为空,会导致Nodemailer使用默认逻辑连接本地地址。
补充谷歌SMTP专属配置:针对谷歌SMTP,建议在 transporter 配置中添加
requireTLS: true,确保连接启用TLS加密:
this.transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: process.env.SMTP_PORT, secure: false, requireTLS: true, // 新增该行 auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASSWORD, }, });
- 代码拼写问题(非当前报错原因,但建议修正):方法名
sendActicvationMail存在拼写错误(多了一个字母c),后续调用时可能引发未定义方法错误,建议修正为sendActivationMail。
内容的提问来源于stack exchange,提问作者Daniil Galitskii
相关产品推荐
相关产品推荐

