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

GCP VM生产环境发邮件触发SMTPConnection超时错误求助(本地正常)

GCP虚拟机SMTP连接超时问题排查与解决

核心问题

GCP虚拟机实例通过Nodemailer连接smtp.gmail.com时出现连接超时,但本地环境正常运行,已尝试使用Gmail应用密码仍未解决。错误日志如下:

{"textPayload": "Error: Connection timeout\n at SMTPConnection._formatError (/usr/src/app/node_modules/nodemailer/lib/smtp-connection/index.js:784:19)\n at SMTPConnection._onError (/usr/src/app/node_modules/nodemailer/lib/smtp-connection/index.js:770:20)\n at Timeout. (/usr/src/app/node_modules/nodemailer/lib/smtp-connection/index.js:229:22)\n at listOnTimeout"}

当前使用的Nodemailer配置:

const transporter = createTransport({
    host: "smtp.gmail.com",
    port: 465,
    secure: true,
    auth: {
      user: "user",
      pass: "pass", // gmail pass
    },
});

排查方向及解决方案

1. 切换到GCP允许的SMTP端口

GCP默认限制了465等端口的出站流量,改用587端口(STARTTLS协议)是最直接的解决办法:
修改Nodemailer配置:

const transporter = createTransport({
    host: "smtp.gmail.com",
    port: 587,
    secure: false, // 587端口不直接使用SSL,通过STARTTLS升级加密
    requireTLS: true, // 强制启用TLS加密
    auth: {
      user: "your-email@gmail.com",
      pass: "your-app-password",
    },
});

同时检查GCP VPC防火墙规则,确保出站方向允许TCP 587端口的流量。

2. 验证虚拟机网络连通性

在GCP虚拟机内执行以下命令测试网络连通:

telnet smtp.gmail.com 587
# 或用nc测试
nc -zv smtp.gmail.com 587

如果连接失败,说明VPC防火墙、路由或NAT配置存在限制,需要调整网络规则放行对应端口。

3. 避开GCP的SMTP限制政策

GCP对外部SMTP服务有严格管控,长期解决方案可以考虑:

  • 使用GCP官方的邮件发送服务,比如结合Cloud Functions和Gmail API(需要启用API并配置OAuth2认证)
  • 采用GCP合作的邮件服务(如SendGrid、Mailgun),这些服务的端口通常不受GCP限制
  • 配置GCP SMTP Relay(需要验证域名,适合企业级场景)

4. 确认Gmail账号状态

  • 确保应用密码是为开启了两步验证的账号生成的,且生成时选择了正确的应用类型(如"Mail")
  • 登录Gmail账号检查安全中心,确认账号没有因异常活动被限制发送邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:00:46