Scaleway部署Node.js API后,Nodemailer+Gmail遇ETIMEDOUT连接超时错误
解决Scaleway部署Node.js API时Nodemailer连接Gmail SMTP超时问题
可能的原因与解决方案
1. 确认Scaleway平台的出站端口限制
Scaleway默认可能对出站SMTP端口(如587、465)有限制,这是云服务商常见的反垃圾邮件策略。注意你提到的456端口是错误的,Gmail SMTP的标准端口为587(TLS)或465(SSL)。
操作步骤:
- 进入Scaleway实例的安全组配置,确认出站规则允许TCP 587/465端口访问任意地址
- 若使用Scaleway容器服务,检查容器网络的出站策略是否放开对应端口
2. 修改Nodemailer配置,明确指定连接参数
不要依赖service: 'gmail'的默认配置,手动指定SMTP参数,避免自动解析的不确定性:
const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, // 优先尝试465端口,比587更不易被拦截 secure: true, // 465端口需开启secure auth: { user: process.env.MAIL_ADRESS, pass: process.env.MAIL_PASSWORD }, // 延长连接超时时间,避免因网络延迟触发超时 connectionTimeout: 10000, greetingTimeout: 10000 });
如果465端口无法连接,切换至587端口,调整对应参数:
const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, requireTLS: true, // 强制启用TLS加密 auth: { user: process.env.MAIL_ADRESS, pass: process.env.MAIL_PASSWORD } });
3. 检查Gmail账号的安全验证设置
如果你的Gmail账号开启了两步验证(2FA),普通密码无法用于SMTP验证,必须生成应用专用密码(App Password):
- 登录Google账号,进入「安全」设置页面
- 在「应用专用密码」选项中生成专用密码,替换
process.env.MAIL_PASSWORD的值 - 若未开启2FA,需临时开启「不太安全的应用访问」(注:该选项将被Google逐步移除,优先推荐应用专用密码)
4. 强制使用可访问的SMTP IP或更换DNS服务器
生产环境解析的74.125.140.108可能在Scaleway网络中无法访问,你可以手动指定本地能正常连接的IP:
const transporter = nodemailer.createTransport({ host: '142.251.5.108', // 直接使用本地解析的可访问IP port: 465, secure: true, auth: { user: process.env.MAIL_ADRESS, pass: process.env.MAIL_PASSWORD }, dnsCache: false // 禁用DNS缓存,避免解析错误 });
或者在Scaleway实例/容器中配置DNS服务器为8.8.8.8,确保解析的SMTP IP处于可访问网段。
5. 改用Scaleway自带邮件服务
如果以上方法均无效,建议使用Scaleway官方提供的SMTP服务,避免跨平台端口限制问题,配置示例:
const transporter = nodemailer.createTransport({ host: 'smtp.scaleway.com', port: 587, secure: false, auth: { user: '你的Scaleway邮箱用户名', pass: '你的Scaleway邮箱密码' } });
内容的提问来源于stack exchange,提问作者flmd
相关产品推荐
相关产品推荐

