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
相关产品推荐
相关产品推荐

