使用Amazon SES PHP发邮件时模板URL内{{values}}变量未替换问题咨询
Amazon SES 模板URL内变量替换失效修复方案
根因
Amazon SES 模板采用 Handlebars 渲染引擎,仅识别并替换未被HTML实体编码的{{变量名}}占位符。URL属性内的占位符替换失效,通常是模板上传阶段占位符被自动编码为%7B%7B变量名%7D%7D导致,SES无法识别编码后的占位符,因此不会执行替换。同时SES仅校验模板文本区域声明的变量是否传入,属性内未识别的占位符不会触发必填校验,因此会出现文本变量替换正常、URL变量不生效、缺失URL变量不会导致发送失败的现象。
修复步骤
- 重新上传SES模板,确保模板HTML部分的链接代码未做额外实体编码,正确写法示例:
注意不要对<a href="https://example.com/register.php?id={{userid}}">Register</a>{{userid}}做URL编码,也不要对整个href属性值做HTML实体转义后再存入SES模板。 - 检查
ReplacementTemplateData的JSON格式是否正确,变量名和占位符完全匹配(大小写敏感),PHP传参参考写法:'ReplacementTemplateData' => json_encode([ 'userid' => $userId ]) - 若URL中传递的变量包含特殊字符,使用Handlebars非转义语法
{{{变量名}}},避免变量值被自动转义导致URL失效,示例:<a href="https://example.com/register.php?id={{{userid}}}">Register</a>
验证方法
使用SES控制台的「发送测试邮件」功能,选择对应模板,传入测试参数{"userid":"12345"},查看收到的邮件链接是否完成替换。
内容的提问来源于stack exchange,提问作者Radu Craciun
相关产品推荐
相关产品推荐

