使用amazon_cognito_identity_dart_2 1.0.3实现AWS Cognito重置密码功能时未收到确认邮件的问题排查求助
从你提供的日志Code sent to {"CodeDeliveryDetails":{"AttributeName":"email","DeliveryMedium":"EMAIL","Destination":"c***@g***.com"}}来看,Cognito已经成功触发了密码重置邮件的发送流程,所以问题大概率出在AWS侧的配置上,不过我们可以从两方面逐一排查:
一、AWS端配置检查(优先级更高)
验证SES发送环境:
如果你的用户池使用Cognito默认的邮件服务(基于AWS SES),默认处于Sandbox模式。这种模式下,只有经过SES验证的邮箱才能接收邮件,而且发件方是Cognito默认的no-reply@verificationemail.com。你需要登录AWS SES控制台,在「已验证的身份」中添加并验证你的目标邮箱地址,验证完成后再测试。检查邮件模板与投递状态:
- 进入Cognito用户池控制台,找到「消息自定义」->「找回密码」,确认邮件模板是启用状态,内容没有包含容易被邮件服务商判定为垃圾邮件的关键词。
- 登录SES控制台查看「监控」->「发送统计」,或者去CloudWatch日志里搜索SES相关的投递记录,看看邮件是被退回、进入队列,还是被服务商标记为垃圾邮件。
检查邮箱的垃圾邮件文件夹:
很多时候Cognito的验证邮件会被Gmail、Outlook等服务商自动归类到垃圾邮件或订阅文件夹里,先去这些地方确认一下。
二、代码层面的快速排查(可能性较低)
核对用户池配置:
虽然日志已经返回了正确的CodeDeliveryDetails,但还是可以再确认你的userPool实例的用户池ID、客户端ID、区域参数是否完全正确,避免因配置细微错误导致的隐性问题。确认邮箱参数准确性:
检查你传入resetPassword函数的email参数是否和日志里显示的c***@g***.com完全一致,有没有拼写错误(比如少写一个字母、域名错误)。测试手动触发邮件:
在Cognito用户池控制台的用户列表中,找到对应的用户,手动触发「发送忘记密码邮件」操作。如果手动发送也收不到,就可以完全排除代码问题,专注于AWS配置排查。
内容的提问来源于stack exchange,提问作者mabote thomas

