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

AWS Cognito CustomMessage_SignUp触发仍发默认邮件问题

问题解决:Cognito CustomMessage触发器生产环境不生效,及HTML邮件支持确认

问题背景

配置Cognito用户池的CustomMessage触发器实现注册时发送自定义HTML验证邮件,本地Localstack测试正常,但部署到AWS生产环境后仍收到默认验证邮件。Lambda日志显示触发器已调用、无报错,且已正确修改event.Response内容。

排查与解决方案

1. 核心冲突:UserPool验证风格与触发器的优先级问题

你当前在UserPool配置中设置了:

userVerification: {
    emailStyle: VerificationEmailStyle.LINK
},

该配置会让Cognito默认生成带验证链接的邮件,尽管官方文档说明CustomMessage触发器应覆盖默认行为,但实际生产环境中存在优先级冲突:当emailStyle设为LINK时,Cognito会优先使用默认模板,忽略触发器返回的自定义内容。

解决步骤:
将emailStyle改为CODE,因为你已在触发器中自定义了完整的验证链接,无需Cognito生成默认链接:

userVerification: {
    emailStyle: VerificationEmailStyle.CODE
},

2. 验证码占位符问题

从日志中可见,你的验证链接参数为code=%7B%23%23%23%23%7D,即{####}占位符未被替换为实际验证码。这是因为emailStyle=LINK时,Cognito传递给触发器的CodeParameter是占位符而非真实验证码;改为CODE风格后,CodeParameter会返回实际的验证字符串,链接将自动变为有效地址。

3. 确认触发器配置与权限

  • 登录AWS控制台,进入目标Cognito用户池→触发器页面,确认CustomMessage触发器已正确关联到你的Lambda函数,无重复或错误配置。
  • 检查Lambda的IAM角色,确保拥有cognito-idp:InvokeTrigger权限(CDK通常会自动添加,但可手动确认)。

HTML邮件支持确认

Cognito CustomMessage触发器完全支持HTML邮件:当你返回的EmailMessage包含完整HTML结构(如<html>、<body>标签)时,Cognito会自动将邮件的Content-Type设置为text/html,无需额外配置。你当前日志中显示的HTML模板内容格式是正确的,解决上述冲突后即可正常渲染。

最终验证步骤

  1. 修改UserPool的emailStyle配置为CODE
  2. 重新部署CDK栈
  3. 发起新的注册请求,检查邮箱是否收到自定义HTML验证邮件

内容的提问来源于stack exchange,提问作者Nikola-Milovic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:10:41