Firebase无法发送验证邮件、重置密码邮件的故障排查
Firebase 控制台提示邮件已发送但收不到的排查&解决方案
按优先级从高到低排查以下常见问题:
- 先核对操作和邮件类型的对应关系:你提到最初需求是发送邮箱验证邮件,但操作时点的是
Reset password按钮,这个按钮触发的是密码重置邮件,和邮箱验证邮件是完全独立的两类邮件,要发送验证邮件需要在用户详情页选择Send verification email选项。 - 先查邮件投递日志定位根因:进入Firebase控制台
Authentication > Templates > Email delivery页面,这里会记录所有触发的邮件的真实投递状态:是被发信抑制、被邮箱服务商拒收、还是投递成功进了垃圾邮件,都有明确标记,不用盲目换邮箱测试。- 如果日志里显示邮箱被加入抑制列表(suppressed),一般是短时间内给同一个邮箱发信超过5次、或者之前的邮件被标记为垃圾邮件触发的,手动在这个页面移除对应邮箱的抑制状态即可恢复。
- 检查发信域名配置:进入
Authentication > Templates > Sender domain页面,如果你用的是Firebase默认提供的发信域名,新创建的未绑定结算方式的项目很容易触发风控静默拦截,控制台依然会提示发送成功,但实际不会投递。建议按页面提示配置自己的域名作为发信域,补全SPF、DKIM记录,能大幅提升送达率。 - 确认配额和项目状态:
- Spark免费计划每天的认证类邮件发送配额非常低,短时间多次测试很容易触达配额上限,触发限流后不会有明确报错,只会静默丢弃发信请求,等待24小时或者升级到Blaze计划(免费额度内不产生费用)即可解除限制。
- 刚创建、信息不全、未绑定结算账号的项目会触发Google的风控规则,外发邮件功能会被临时限制,补全项目信息、绑定结算账号后即可恢复。
- 排除控制台功能bug:不要只依赖控制台的手动发信按钮测试,直接在前端集成对应SDK方法走正式发信流程,有报错会直接返回明确错误码,以JS SDK为例,发送密码重置邮件的代码如下:
import { getAuth, sendPasswordResetEmail } from "firebase/auth"; const auth = getAuth(); sendPasswordResetEmail(auth, "你的测试邮箱地址") .then(() => { // 发信请求提交成功逻辑 }) .catch((error) => { // 打印错误码和错误信息定位问题 console.log(error.code, error.message); });
- 检查邮件模板配置:进入
Authentication > Templates页面,确认密码重置、邮箱验证的邮件模板没有被添加违规内容,没有被修改到触发拦截规则,可以直接点模板内的测试发送按钮发信,测试信如果都收不到,优先按前面的发信域、风控规则排查。
内容的提问来源于stack exchange,提问作者aleksandereiken
相关产品推荐
相关产品推荐

