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

Node.js中使用Amazon Pinpoint模板带变量发送邮件的问题

使用Amazon Pinpoint预定义模板发送邮件的实现方案

你当前使用@aws-sdk/client-pinpoint发送普通邮件的代码运行正常,但使用预定义模板时无法发送且无报错,核心问题是未正确配置模板相关参数。以下是修改后的实现代码,包含模板名称/ARN传递和变量替换逻辑:

async sendEmailWithTemplate(body: any): Promise<void> {
    const fromAddress = 'test@domain.com';
    const toAddress = 'test@domain.com';
    const projectId = 'XXX-XXXX-XXXX';
    // 替换为你的模板名称或ARN
    const templateName = 'YOUR_TEMPLATE_NAME';
    // 模板变量替换键值对,键对应模板中定义的占位符
    const templateSubstitutions = {
        '{{USER_NAME}}': 'John Doe',
        '{{VERIFY_LINK}}': 'https://your-domain.com/verify'
    };

    const params = {
        ApplicationId: projectId,
        MessageRequest: {
            Addresses: {
                [toAddress]: {
                    ChannelType: 'EMAIL',
                    // 传递模板变量的实际替换值
                    Substitutions: templateSubstitutions
                },
            },
            // 用TemplateConfiguration替代原有的MessageConfiguration
            TemplateConfiguration: {
                EmailTemplate: {
                    // 二选一:填写模板名称或ARN
                    TemplateName: templateName,
                    // TemplateArn: 'arn:aws:pinpoint:us-east-1:123456789012:email-template/YOUR_TEMPLATE_NAME'
                }
            },
            // 若模板未固定发件地址,可自定义发件人(需已在Pinpoint验证)
            EmailMessageConfiguration: {
                FromAddress: fromAddress
            }
        },
    };

    try {
        const data = await this.pinpointClient.send(new SendMessagesCommand(params));

        const { MessageResponse } = data;

        if (!MessageResponse || !MessageResponse.Result) throw Error('Failed!');

        const recipientResult = MessageResponse?.Result[toAddress];

        if (recipientResult.StatusCode !== 200) {
            throw new Error(recipientResult.StatusMessage);
        } else {
            console.log(recipientResult.MessageId);
        }
    } catch (err) {
        console.log(err.message);
        // 如需排查细节,可打印完整错误对象
        // console.error('完整错误信息:', err);
    }
}

关键要点:

  • 模板配置:移除原MessageConfiguration,改用TemplateConfiguration指定邮件模板,TemplateName和TemplateArn二选一即可。
  • 变量替换:在目标地址的Substitutions字段传入键值对,键需与模板中定义的占位符完全匹配(如{{USER_NAME}})。
  • 发件地址:若模板未预设发件人,通过EmailMessageConfiguration.FromAddress指定已验证的发件邮箱。
  • 错误排查:若仍无报错但邮件未发送,建议在catch块打印完整错误对象,Pinpoint会返回模板不存在、变量不匹配等具体原因。

内容的提问来源于stack exchange,提问作者Feras Allaou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:50:36