如何在AWS Cognito中实现新用户注册时自动发送邮件?
实现AWS Cognito新用户注册后自动触发邮件发送的方案
方案1:使用Cognito内置默认邮件通知(无需额外开发)
适合仅需要发送基础通知、不需要复杂自定义逻辑的场景,配置步骤如下:
- 进入AWS控制台的Cognito用户池管理页,选择你正在使用的目标用户池
- 切换到消息标签页,找到电子邮件配置板块
- 先完成发件人配置:可选择使用Cognito默认的邮件发送服务,或者绑定你在AWS SES中验证过的域名/邮箱作为发件人(推荐后者,可避免邮件进入垃圾箱)
- 往下找到注册相关的通知配置项,开启新用户注册成功通知开关
- 你可以自定义邮件的主题、正文模板,支持插入Cognito内置变量比如
{username}、{email}等动态内容 - 保存配置后即可生效,新用户完成注册后会自动触发邮件发送,你也可以根据需求调整触发时机为用户完成邮箱验证后再发送。
方案2:使用Cognito Lambda触发器实现自定义邮件发送(适合复杂定制场景)
如果需要在邮件中插入业务自定义内容、对接第三方邮件服务,可通过Lambda触发器实现,步骤如下:
- 提前编写自定义邮件发送Lambda函数,函数内可调用AWS SES、第三方邮件服务完成发送,示例核心代码片段(Python):
import boto3 ses = boto3.client('ses') def lambda_handler(event, context): # 从Cognito触发事件中提取新用户属性 user_email = event['request']['userAttributes']['email'] user_name = event['request']['userAttributes']['cognito:username'] verify_status = event['request']['userAttributes']['email_verified'] # 可自定义判断逻辑,仅给已验证邮箱的用户发邮件 if verify_status == 'true': ses.send_email( Source='你的发件人邮箱地址', Destination={'ToAddresses': [user_email]}, Message={ 'Subject': {'Data': '欢迎注册我们的服务'}, 'Body': {'Text': {'Data': f'你好{user_name},感谢你完成注册,开启你的使用之旅吧!'}} } ) # 必须返回event对象,否则会中断Cognito的后续流程 return event
- 进入Cognito用户池的触发器配置页,找到
Post sign-up(注册后)触发器选项 - 在下拉列表中选择你刚才创建的Lambda函数,保存配置
- 最后配置权限:如果使用AWS SES发邮件,需要给Lambda的执行角色添加
ses:SendEmail权限;如果对接第三方邮件服务,要确保Lambda所属子网可以访问公网或者对应服务的私有端点。
注意:如果你的用户池开启了注册强制验证邮箱/手机号的规则,建议在发送逻辑中增加验证状态判断,避免给无效邮箱发送冗余邮件。
内容的提问来源于stack exchange,提问作者krishnakumar Balasubramaniam
相关产品推荐
相关产品推荐

