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

Nodemailer在GCP实例(Nginx反向代理)无法发邮件求助

解决Nodemailer在GCP实例上无法连接1and1 SMTP的问题

看你的描述,本地能正常发邮件但部署到GCP就不行,而且telnet smtp.1and1.com 587连不上,telnet smtp.gmail.com 587却可以,这大概率是GCP网络限制或者1and1(现IONOS)的IP屏蔽策略导致的,下面给你一步步排查的方案:

1. 检查GCP实例的防火墙出站规则

GCP默认VPC防火墙通常允许大部分出站流量,但自定义规则可能会限制特定端口或IP:

  • 登录GCP控制台,进入实例所在的VPC网络
  • 查看出站规则,确认是否允许目标为smtp.1and1.com(或整个587端口)的TCP流量
  • 如果没有,添加一条出站规则:协议选TCP,端口填587,目标设为0.0.0.0/0(或更严格的smtp.1and1.comIP段),优先级设为高于其他限制规则

注意:GCP对25端口有严格限制,但587是允许的,还是要确认实例没被限制出站到该端口。

2. 验证1and1 SMTP是否屏蔽了GCP的IP

很多邮件服务商(包括IONOS)会屏蔽云服务商IP段,因为这类IP常被用来发垃圾邮件:

  • 换个非GCP的网络(比如本地用手机热点)测试telnet smtp.1and1.com 587,如果能连上,基本确定GCP的IP被IONOS屏蔽了
  • 联系IONOS客服,提供你的GCP实例公网IP,请求加入白名单
  • 给GCP实例配置反向DNS(PTR记录),同时确保发件邮箱域名有正确的SPF、DKIM记录,提升IP信誉度,减少被屏蔽的概率

3. 调整Nodemailer的SSL/STARTTLS配置

虽然你说启用了SSL,但本地和服务器的证书验证逻辑可能有差异,试试修改代码配置:

const transporter = nodemailer.createTransport({
  host: 'smtp.1and1.com',
  port: 587,
  secure: false, // 587端口用STARTTLS,不是直接SSL,需设为false
  auth: {
    user: 'your-email@example.com',
    pass: 'your-password'
  },
  tls: {
    rejectUnauthorized: false // 临时关闭证书验证测试,不建议长期使用
  }
});

如果还是不行,可以尝试切换到465端口(SSL直连),测试telnet smtp.1and1.com 465是否能连通。

4. 检查服务器内部防火墙

GCP实例可能启用了ufw等内部防火墙,执行以下命令确认:

sudo ufw status

如果发现587端口被限制,添加允许规则:

sudo ufw allow out 587/tcp

5. 用nc工具进一步排查网络连通性

在GCP实例上用nc工具测试连接:

nc -zv smtp.1and1.com 587

如果显示超时,说明网络层面连不上,重点排查GCP防火墙或IONOS的屏蔽;如果连接成功但Nodemailer仍无法发件,再回到代码配置细节排查。


内容的提问来源于stack exchange,提问作者yousuf iqbal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:15:57