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

使用Cloud Functions和Nodemailer发送邮件无法收信问题求助

Cloud Functions + Nodemailer 邮件发送失败排查点

以下是你代码和配置中可能存在的问题,按出现概率从高到低排列:

  • Gmail SMTP 授权配置错误
    2022年起Gmail已不再支持第三方应用直接使用账号主密码登录SMTP服务,你需要先完成两个配置:
    1. 为你的Gmail账号开启两步验证
    2. 生成16位的应用专用密码,替换代码中pass字段的原有账号密码
  • 入参取值逻辑不匹配请求方式
    你当前使用request.query获取参数,仅适用于GET请求、参数拼接在URL后的场景。如果你的前端联系表单使用POST提交,参数存放在请求体中,需要将取值逻辑改为request.body。可在函数中添加日志打印参数值,在Firebase Cloud Functions日志面板确认是否能正常拿到sender、phone、message三个参数,参数为空会直接导致邮件发送失败。
  • 回调逻辑存在缺陷
    你当前的发送回调中,错误分支执行response.send后没有终止执行,会继续执行后续的response.send导致重复返回响应,可能造成云函数提前被回收、发送逻辑未执行完成。修复后的代码参考:
    transporter.sendMail(mailOptions, (err, info) => {
      if (err) {
        console.error('发送错误:', err);
        return response.status(500).send(err.toString());
      }
      return response.status(200).send('Email sent');
    });
    
  • Firebase 套餐权限限制
    如果你使用的是Firebase Spark免费套餐,默认禁止发起Google服务外的出站网络请求,无法调用Gmail SMTP接口,需要升级到Blaze付费套餐才可使用对外请求能力。
  • 发件人配置触发反垃圾规则
    Gmail SMTP不允许代发非当前账号所属的邮箱地址,你直接将用户提交的邮箱作为from字段值,会被SPF/DKIM校验拦截,甚至直接触发发送失败。建议将from字段改为你自己的Gmail邮箱,新增replyTo: sender.toLowerCase()配置,既可以避免拦截,收到邮件后点回复也能直接回给提交反馈的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:48:03