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
相关产品推荐
相关产品推荐

