Firebase Auth SendEmailVerificationAsync调用报错:收件人邮箱无效
我之前在Unity集成Firebase Auth时也碰到过类似的坑,结合你描述的情况(用户创建/登录正常、控制台可见用户,但发送验证邮件时报错邮箱无效),给你几个实用的排查方向:
确认当前用户对象的邮箱准确性
创建用户后,别直接用本地输入的邮箱字符串,一定要从Firebase返回的用户对象中获取邮箱。你可以在调用验证前打印日志确认:Debug.Log($"当前登录用户邮箱:{FirebaseAuth.DefaultInstance.CurrentUser.Email}");有时候会因为本地缓存或异步同步问题,导致获取的邮箱值异常,这一步能快速排除这个低级错误。
检查Firebase控制台的邮件配置
登录Firebase控制台,进入「Authentication」→「Templates」→「Email verification」:- 确认邮件模板处于启用状态,没有被误关闭;
- 检查模板中的发送域名、邮件内容是否合规,有没有包含可能被邮件服务商拦截的内容;
- 如果你自定义了SMTP服务,要确认SMTP配置的账号、密码、端口都是正确的,默认使用Firebase自带SMTP的话可以跳过这步。
处理SDK版本的同步延迟问题
你使用的Firebase Unity SDK 6.15.2是比较旧的版本,这个版本存在一个已知的小问题:用户创建成功后立即调用SendEmailVerificationAsync(),可能因为用户数据还没完全同步到Firebase后端,导致后端识别邮箱异常。
解决办法是先刷新用户信息再发送:try { await FirebaseAuth.DefaultInstance.CurrentUser.ReloadAsync(); await FirebaseAuth.DefaultInstance.CurrentUser.SendEmailVerificationAsync(); } catch (FirebaseException ex) { Debug.Log($"邮件发送失败:错误码 {ex.ErrorCode},详情:{ex.Message}"); }也可以尝试延迟1-2秒再调用验证接口,给后端留足同步时间。
测试不同邮箱域名,排查服务商拦截
有些邮箱服务商(尤其是小众域名或企业邮箱)可能会拦截Firebase的验证邮件,甚至直接返回“邮箱无效”的错误给Firebase后端。你可以换几个主流域名的邮箱(比如Gmail、Outlook、QQ邮箱)测试,看看是不是特定域名的问题。查看Firebase的详细错误日志
除了Unity控制台的错误信息,你还可以:- 在Firebase控制台的「Authentication」→「Users」页面,找到对应用户,查看该用户的操作日志,有没有更详细的邮件发送失败原因;
- 捕获FirebaseException的错误码,不同的错误码对应不同的问题(比如权限不足、后端服务故障等),能帮你精准定位。
如果以上步骤都排查完还是没解决,建议考虑升级Firebase Unity SDK到与Unity 2019.4兼容的较新版本(注意查看官方兼容性说明),旧版本的一些bug可能已经在后续版本中修复了。
内容的提问来源于stack exchange,提问作者iseng saja

