Mandrill:如何为Handlebars模板格式化复杂数据
解决Mandrill模板无法读取发送数据的问题
嘿,我之前也踩过Mandrill模板变量不生效的坑,咱们来一步步排查解决这个问题:
1. 严格匹配官方要求的变量格式
首先要确认你传递的global_merge_vars(如果是针对单个收件人的局部变量则用merge_vars)是完全符合官方要求的数组结构——每个对象必须包含小写的name和content字段,这俩字段名是大小写敏感的!要是你写成Name或者NAME,模板里的{{user_name}}绝对找不到对应值。
给你一个标准的请求数据示例(Mandrill API通常接受JSON格式):
{ "key": "你的Mandrill API密钥", "message": { "to": [{"email": "user@example.com"}], "subject": "欢迎注册", "template_name": "你的欢迎模板名称", "template_content": [], "global_merge_vars": [ { "name": "user_name", "content": "Mandrill_User1" }, { "name": "user_email", "content": "user@example.com" } ] } }
2. 核对模板变量的语法与命名
Mandrill模板里的变量用双大括号{{变量名}},要保证变量名和你数据里name字段的值完全一致——包括大小写、下划线这些细节。比如模板里写{{User_Name}},但数据里是user_name,肯定匹配不上。
另外,要是你给特定收件人单独传变量,别放到global_merge_vars里,得用merge_vars数组,示例如下:
"merge_vars": [ { "rcpt": "user@example.com", "vars": [ { "name": "user_name", "content": "Mandrill_User1" } ] } ]
3. 确认模板的关联状态
- 检查调用API时填的
template_name和Mandrill后台创建的模板名称完全一致,别打错字或者多了空格; - 确保模板处于「已发布」状态,草稿状态的模板可能无法被API正常调用。
4. 用渲染接口快速排查问题
你可以先调用Mandrill的templates/render API来测试模板渲染结果,这个接口会直接返回渲染后的HTML,能帮你快速区分是数据格式问题还是模板本身的问题。请求示例:
{ "key": "你的Mandrill API密钥", "template_name": "你的欢迎模板名称", "template_content": [], "merge_vars": [ { "name": "user_name", "content": "Mandrill_User1" } ] }
如果这个接口返回的结果里变量还是没被替换,那大概率是数据格式或变量名不匹配;如果渲染正常,那可能是发送邮件时的参数配置有误。
内容的提问来源于stack exchange,提问作者Dave Sag
相关产品推荐
相关产品推荐

