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

使用Nodemailer发送邮件遭遇ECONNRESET错误,寻求解决方案

解决Nodemailer发送Gmail时出现的Error: read ECONNRESET问题

Error: read ECONNRESET 通常表示TCP连接被对方重置,结合你用Gmail作为邮件服务的场景,以下是针对性的排查和解决步骤:

1. 检查Gmail账户的安全认证配置

  • 若你的Gmail账户开启了两步验证(2FA),必须使用应用专用密码替代原账户密码:
    登录Google账户后台 → 安全 → 应用专用密码(需先开启2FA)→ 生成对应密码,将其赋值给process.env.PASSWORD。
  • 若未开启2FA,需开启Google账户的"不太安全的应用访问"(注意:该选项已被Google逐步限制,建议优先开启2FA使用应用专用密码)。

2. 修正Nodemailer传输配置

默认的service: "gmail"可能存在隐式配置问题,建议手动指定SMTP服务器参数:

方案一:使用465端口(SSL加密)

const transporter = nodemailer.createTransport({
    host: "smtp.gmail.com",
    port: 465,
    secure: true, // 465端口需设为true
    auth: {
        user: process.env.EMAIL,
        pass: process.env.PASSWORD,
    },
});

方案二:使用587端口(STARTTLS加密)

const transporter = nodemailer.createTransport({
    host: "smtp.gmail.com",
    port: 587,
    secure: false, // 587端口需设为false
    requireTLS: true, // 强制启用STARTTLS
    auth: {
        user: process.env.EMAIL,
        pass: process.env.PASSWORD,
    },
});

3. 规范异步逻辑处理

你的路由声明了async但仍使用回调式sendMail,建议改用async/await优化错误捕获:

router.post("/sendmail", async (req, res) => {
    const { email } = req.body;
    const transporter = nodemailer.createTransport({
        // 这里填入修正后的配置
        host: "smtp.gmail.com",
        port: 465,
        secure: true,
        auth: {
            user: process.env.EMAIL,
            pass: process.env.PASSWORD,
        },
    });
    const mailOptions = {
        from: process.env.EMAIL,
        to: email,
        subject: "Sending Email For password Reset",
        html: "<h1>Congratulation You successfully send Email</h1>",
    };

    try {
        const info = await transporter.sendMail(mailOptions);
        console.log("Email sent", info.response);
        res.status(201).json({
            message: "Email sent Successfully",
        });
    } catch (error) {
        console.log("error", error);
        res.status(500).json({ error: error.message });
    }
});

4. 验证环境变量有效性

在代码中临时添加日志,确认process.env.EMAIL和process.env.PASSWORD已正确加载:

console.log("Loaded email:", process.env.EMAIL);
console.log("Loaded password:", process.env.PASSWORD ? "****" : "not set");

避免因环境变量未正确读取导致认证失败,进而触发连接重置错误。

5. 排查网络环境问题

若处于国内网络环境,可能存在SMTP端口(465/587)被屏蔽的情况,可尝试更换邮箱服务(如腾讯企业邮箱、网易邮箱),或使用代理进行连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:23:14