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

Node.js中SMTP+Nodemailer本地正常生产环境无法发件求助

Node.js + Nodemailer 生产环境SMTP连接被拒绝(ECONNREFUSED)排查

我用Node.js结合Nodemailer模块实现用户注册后的验证邮件发送功能,本地localhost测试时代码能正常发件,但部署到生产服务器后完全无法运行。已联系主机服务商确认配置无误,报错信息如下:

{ Error: connect ECONNREFUSED 198.xx.xxx.xxx
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
  errno: 'ECONNREFUSED',
  code: 'ESOCKET',
  syscall: 'connect',
  address: '198.xx.xxx.xxx',
  port: 465,
  command: 'CONN' }

附上实现代码:

const sendMsg = async (receiver, title, msg) => {

    // 定义SMTP服务器配置
    var smtpTransport = nodemailer.createTransport({
       host: "mail.privateemail.com",
       secure: true,
       port: 465, 
       auth: {
            user: "myxxxxx@company.com",
            pass: "mypassword"
        }
    });

    // 定义邮件参数
    var mailOptions={
        from: "My Company <myxxxxx@company.com>",
        to : receiver,
        subject : title,
        text : "",
        html : msg 
    }

    // 发送邮件
    var mailSent = await smtpTransport.sendMail(mailOptions)
    .then((response) => {return true;})
    .catch(err => { console.log(err); return false;});

    return mailSent
};

排查方向和解决方法

  • 检查生产服务器出站端口限制:本地能正常连接但生产环境不行,大概率是服务器防火墙或安全组封禁了465端口的出站请求。即使主机商称配置无误,也可以在生产服务器上执行telnet mail.privateemail.com 465或nc -zv mail.privateemail.com 465命令验证端口连通性,若不通直接要求服务商开放该端口的出站权限。

  • 切换SMTP端口与安全配置:部分服务器对465端口管控严格,可尝试改用587端口并调整安全设置:

    var smtpTransport = nodemailer.createTransport({
       host: "mail.privateemail.com",
       secure: false, // 关闭强制SSL
       port: 587, 
       requireTLS: true, // 自动启动TLS协商
       auth: {
            user: "myxxxxx@company.com",
            pass: "mypassword"
        }
    });
    
  • 移除硬编码的敏感信息:虽然不是直接报错原因,但生产环境把邮箱密码硬编码在代码中存在安全风险,建议改用环境变量存储:

    auth: {
         user: process.env.EMAIL_USER,
         pass: process.env.EMAIL_PASS
     }
    
  • 开启调试日志定位问题:在SMTP配置中添加调试参数,获取更详细的连接过程日志,便于精准排查:

    var smtpTransport = nodemailer.createTransport({
       host: "mail.privateemail.com",
       secure: true,
       port: 465, 
       auth: {
            user: "myxxxxx@company.com",
            pass: "mypassword"
        },
        debug: true, // 开启调试模式
        logger: true // 打印详细日志
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:17:33