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

为何Cognito的AdminCreateUser事件无法自定义邮件模板?

问题排查:AdminCreateUser触发CustomMessage Lambda后邮件正文仍为默认模板

可能的原因及解决步骤

1. 模板渲染时异步函数未正确等待

如果templateGenerator是异步函数,当前代码中未使用await获取返回值,会导致template为Promise对象,mustache.render渲染后得到无效内容(如[object Promise])。Cognito检测到邮件正文无效时,会自动 fallback到默认模板,但主题设置不受影响。

解决:给templateGenerator调用添加await:

const admin_create_user_message = async(event) => {
    // 添加await等待异步模板生成
    let template = await templateGenerator(templates.MAIN, templates.ADMIN_CREATE_USER);
    // ... 其余代码保持不变
}

2. 云端环境变量未正确配置

代码中依赖process.env.S3_BUCKET,如果云端Lambda的环境变量未设置该值或值不正确,模板中依赖s3Bucket的部分会渲染为空或错误内容,导致Cognito判定正文无效,触发默认模板 fallback。

解决:

  • 进入AWS Lambda控制台,找到该函数的配置 -> 环境变量,检查是否存在S3_BUCKET,且值与本地测试一致。
  • 确认模板中s3Bucket的Mustache语法正确(如{{s3Bucket}})。

3. 模板内容在部署时丢失或损坏

本地测试时模板内容正确,但部署过程中(如打包)templates.ADMIN_CREATE_USER对应的模板字符串未被正确打包,或被转义(如换行、引号被处理),导致渲染后的内容为空或格式错误。

解决:

  • 检查部署包中模板文件是否存在,内容与本地是否一致。
  • 在admin_create_user_message中添加日志,输出模板和渲染后的正文内容,通过CloudWatch查看实际结果:
const admin_create_user_message = async(event) => {
    let template = await templateGenerator(templates.MAIN, templates.ADMIN_CREATE_USER);
    console.log("AdminCreateUser模板内容:", template);
    let emailMessage = mustache.render(template, {
        title: "Je account bij financiallease.nl is hersteld",
        preHeader: "Wachtwoord resetten is verplicht",
        s3Bucket: process.env.S3_BUCKET,
        username: event.request.usernameParameter,
    });
    console.log("渲染后的邮件正文:", emailMessage);
    // ... 其余代码
}

4. AdminCreateUser事件参数差异

需确认云端实际触发的CustomMessage_AdminCreateUser事件中,event.request.usernameParameter参数是否存在。部分场景下,云端事件参数可能与本地模拟数据有差异,导致变量为空进而影响模板渲染。

解决:

  • 在Lambda handler中添加日志输出完整事件对象,对比本地测试数据:
exports.handler = async(event) => {
    console.log("触发事件详情:", JSON.stringify(event));
    // ... 其余代码
}

5. Cognito的有效性校验 fallback

当CustomMessage Lambda返回的emailMessage为空、格式错误或包含无效内容时,Cognito会自动使用默认邮件模板。主题修改生效说明Lambda已触发,但正文未通过有效性校验。

解决:

  • 确保渲染后的emailMessage是完整的HTML或纯文本内容,无语法错误。
  • 避免返回空字符串或仅含空白字符的内容。

内容的提问来源于stack exchange,提问作者yosef Mardini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:45:32