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

NestJS与Nodemailer生产环境无法发送邮件问题求助

解决NestJS+Nodemailer生产模式下ECONNREFUSED 127.0.0.1:465问题

从错误信息判断,生产环境中你的邮件服务尝试连接本地127.0.0.1的465端口,而非服务商提供的SMTP服务器,这是核心矛盾点。以下是排查和修复步骤:

  • 核对生产环境SMTP配置
    确认Nodemailer的transporter配置里,host字段是服务商给出的SMTP地址(如smtp.xxx.com),绝对不能是localhost或127.0.0.1。开发模式正常说明本地配置正确,但生产环境大概率没同步正确的服务器地址。

  • 验证环境变量加载逻辑
    如果你用环境变量管理配置(比如.env文件),要确保生产环境的配置加载无问题:

    1. 检查生产环境是否存在.env.prod或系统环境变量已设置正确的SMTP_HOST、SMTP_PORT等参数;
    2. 确认NestJS的ConfigModule在生产模式下能正确读取这些变量,比如是否开启了isGlobal: true,或者模块导入逻辑无误;
    3. 可以临时在代码中添加日志(如console.log(process.env.SMTP_HOST)),验证生产环境读取到的SMTP地址是否为服务商地址而非本地。
  • 确认SMTP加密配置匹配
    465端口通常要求启用SSL加密,要保证transporter配置中secure: true。如果服务商指定用587端口(TLS协议),则设置port: 587、secure: false,同时开启requireTLS: true。

  • 测试服务器到SMTP服务器的网络连通性
    在Ubuntu生产服务器上执行以下命令,测试能否连接服务商的SMTP服务器:

    telnet smtp.your-provider.com 465
    

    (替换为你的服务商SMTP地址)如果连接失败,说明存在网络阻断:

    • 确认服务商是否需要将服务器IP加入白名单;
    • 执行nslookup smtp.your-provider.com检查DNS解析是否正常;
    • 排查服务器托管商的防火墙/安全组是否限制了出站465端口。
  • 统一依赖版本
    确保生产环境的Nodemailer版本和开发环境完全一致,避免版本差异导致的配置兼容问题。可以删除node_modules和package-lock.json后重新安装依赖,再编译部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:42:17