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

Render.com上Express服务调用One.com SMTP超时故障求助

问题描述

我在Render.com上部署了一个Express JS服务器,负责向One.com(自定义域名)托管的邮件服务发起SMTP调用。使用Nodemailer处理SMTP请求,核心代码如下:

app.post("/send-mail", validate(schema), (req, res) => {
  console.log("sending email...");
  let transporter = nodemailer.createTransport({
    host: process.env.REACT_APP_HOST,
    port: process.env.PORT,
    auth: {
      user: process.env.REACT_APP_EMAIL_LOGIN,
      pass: process.env.REACT_APP_EMAIL_PASS,
    },
  });
});

本地运行服务器时能成功接收测试邮件,但部署到Render.com后出现连接超时错误:

Error: Connection timeout
    at SMTPConnection._formatError (/opt/render/project/src/node_modules/nodemailer/lib/smtp-connection/index.js:790:19)
    at SMTPConnection._onError (/opt/render/project/src/node_modules/nodemailer/lib/smtp-connection/index.js:776:20)
    at Timeout.<anonymous> (/opt/render/project/src/node_modules/nodemailer/lib/smtp-connection/index.js:235:22)
    at listOnTimeout (node:internal/timers:573:17)
    at process.processTimers (node:internal/timers:514:7) {
  code: 'ETIMEDOUT',
  command: 'CONN'
}

相同配置下本地与Render环境结果不同,不确定是应转移域名至其他服务商还是Render平台存在问题,需要故障排查方向。

故障排查方向

  • 核对Render环境变量:确认Render上配置的REACT_APP_HOST、PORT、REACT_APP_EMAIL_LOGIN、REACT_APP_EMAIL_PASS与本地完全一致,注意区分SMTP服务端口和Express服务器端口(One.com常用SMTP端口为465(SSL)或587(TLS))。
  • 测试Render出站端口连通性:Render可能限制部分出站端口,在Render服务器上执行telnet <SMTP_HOST> <PORT>或nc -zv <SMTP_HOST> <PORT>命令,验证目标SMTP端口是否可访问。
  • 检查One.com的IP访问限制:One.com可能对SMTP服务设置了IP白名单,确认Render服务器的公网IP是否在允许范围内,可在One.com邮件后台添加IP白名单或联系客服确认是否有IP封锁。
  • 启用Nodemailer调试模式:在createTransport配置中添加debug: true,查看详细连接日志,定位超时发生在DNS解析、握手还是其他阶段。
  • 确认加密连接配置:One.com SMTP通常要求加密连接,显式配置secure: true(对应465端口)或tls: { rejectUnauthorized: false }(解决证书验证问题),避免本地自动适配但Render环境未明确配置的情况。
  • 切换SMTP端口测试:尝试使用One.com提供的备用SMTP端口,比如从587切换到465,排查是否为端口限制导致的超时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:32:53