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

NestJS配置Gmail SMTP的MailerModule连接失败问题求助

NestJS MailerModule 配置Gmail SMTP连接失败解决方案

问题分析

你遇到的ECONNREFUSED 172.217.194.108:465错误,本质是SMTP连接无法建立,可能由配置参数冲突、端口不匹配或网络限制导致。以下是针对两种配置方式的修复方案:


方案1:使用谷歌应用密码(推荐,适配已开启的2FA)

当配置service: 'gmail'时,Nodemailer会自动填充Gmail的SMTP默认参数,但需确保secure属性与对应端口匹配:

正确配置示例(465 SSL端口)

MailerModule.forRootAsync({
  inject: [ConfigService],
  useFactory: async (configService: ConfigService) => {
    return {
      transport: {
        service: 'gmail',
        secure: true, // 对应465 SSL端口
        auth: {
          user: configService.get('email.user'),
          pass: configService.get('email.pass'), // 谷歌应用密码
        },
      },
    };
  },
}),

备选配置(587 TLS端口)

如果465端口被网络限制,可切换到587端口,需明确开启STARTTLS支持:

MailerModule.forRootAsync({
  inject: [ConfigService],
  useFactory: async (configService: ConfigService) => {
    return {
      transport: {
        service: 'gmail',
        secure: false, // 587端口需设为false
        port: 587,
        auth: {
          user: configService.get('email.user'),
          pass: configService.get('email.pass'),
        },
        tls: {
          rejectUnauthorized: false, // 本地开发或特殊环境可能需要该配置
        },
      },
    };
  },
}),

方案2:修复OAuth2配置

若坚持使用OAuth2,需修正端口与secure属性的冲突,并确保配置参数完整:

正确OAuth2配置

MailerModule.forRootAsync({
  inject: [ConfigService],
  useFactory: async (configService: ConfigService) => {
    return {
      transport: {
        host: "smtp.gmail.com",
        port: 587,
        secure: false, // 587端口禁用secure,依赖STARTTLS
        auth: {
          type: "OAuth2",
          user: configService.get('email.user'),
          clientId: configService.get('email.clientId'),
          clientSecret: configService.get('email.clientSecret'),
          refreshToken: configService.get('email.refreshToken'),
        },
        tls: {
          starttls: {
            enable: true, // 强制开启STARTTLS
          },
        },
      },
    };
  },
}),

OAuth2额外检查项

  • 确认Google Cloud Console中已启用Gmail API
  • 确保refreshToken是通过offline访问类型获取的(若之前未配置需重新授权)
  • 检查OAuth2客户端的权限范围包含https://mail.google.com/或https://www.googleapis.com/auth/gmail.send

通用排查步骤

  • 网络连通性验证:在服务器/本地执行nc -zv smtp.gmail.com 465或nc -zv smtp.gmail.com 587,确认端口可正常访问
  • 防火墙/安全组检查:若部署在云服务器,需开放出站的465或587端口
  • 应用密码有效性确认:检查生成的应用密码属于当前谷歌账号,且未被撤销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:11:02