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

使用Firebase触发邮件扩展发送邮件时出现SSL版本号错误

错误原因

这个SSL错误的本质是邮件客户端尝试建立TLS加密连接时,收到的对端响应不符合TLS协议规范,和SMTP账号、密码配置本身无关。你提到邮件记录可以正常写入数据库,说明函数核心逻辑运行正常,问题仅出在和SMTP服务建立网络连接的环节,在Firebase Functions场景下最常见的触发原因有3个:

  • 端口配置和加密模式不匹配:比如配置了secure: true(强制直连SSL),但填的是明文/STARTTLS专用的25、587端口;或者反过来配置了secure: false,但填了SSL直连专用的465端口。
  • Firebase Functions免费套餐出站网络限制:Spark免费套餐下,所有指向非Google自有服务的出站请求都会被平台拦截,拦截返回的是纯文本提示内容,不是合法的TLS握手响应,就会触发这个版本号错误。而写入数据库走的是Firebase内部服务,不受该限制影响,和你观察到的现象完全吻合。
  • TLS版本不兼容:部分老旧SMTP服务仅支持TLS1.0/1.1,而Firebase Functions默认使用的Node.js 16+运行时已经默认禁用了这两个低版本TLS协议,握手时会直接失败。
解决方案

按优先级逐一排查修复即可:

  1. 核对SMTP加密模式与端口匹配关系
    如果你使用Nodemailer作为邮件发送库,严格遵循以下配置规则:
    • 使用465端口发信时,必须设置secure: true
    • 使用25、587端口发信时,必须设置secure: false,需要加密的话可以额外开启STARTTLS强制加密,参考配置:
    const transporter = nodemailer.createTransport({
      host: "你的SMTP服务地址",
      port: 587,
      secure: false,
      requireTLS: true,
      auth: {
        user: "你的SMTP账号",
        pass: "你的SMTP授权码"
      }
    })
    
  2. 检查Firebase套餐权限
    Spark免费套餐不支持调用第三方外部服务,如果你当前使用免费套餐,需要升级到Blaze按需付费套餐,才能正常发起对第三方SMTP服务的出站连接。
  3. 兼容低版本TLS配置(仅用于排查或老旧SMTP场景)
    如果确认端口、套餐配置均无误,可以在传输配置中显式放开TLS版本限制,临时关闭证书校验排查问题:
    const transporter = nodemailer.createTransport({
      host: "你的SMTP服务地址",
      port: 465,
      secure: true,
      auth: {
        user: "你的SMTP账号",
        pass: "你的SMTP授权码"
      },
      tls: {
        minVersion: "TLSv1",
        rejectUnauthorized: false
      }
    })
    
    注意:rejectUnauthorized: false会跳过SSL证书有效性校验,存在中间人攻击风险,仅建议临时排查问题使用,生产环境请确认SMTP服务证书有效性后移除该配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:39:32