为什么Mandrill不能识别我的合并标记?

19

我正在使用Mandrill API,并有一个简单的模板:

<html>
    <body>
        <p>Hello *|name|* 
        </p>
    </body>
</html>

我正在使用这里的send-template.json API: https://mandrillapp.com/api/docs/messages.JSON.html#method=send-template

当我插入我的有效载荷时,“name”变量仍未填充,有任何想法吗?

{
    "key": "secret",
    "template_name": "mandrill-sunday",
    "template_content": [
        {
            "name": "example name"
        }
    ],
    "message": {
        "html": "<p>Example HTML content</p>",
        "text": "Example text content",
        "subject": "example subject",
        "from_email": "message.from_email@example.com",
        "from_name": "Example Name",
        "to": [
            {
                "email": "myemail@gmail.com",
                "name": "Recipient Name"
            }
        ],
        "headers": {
            "Reply-To": "myemail@yahoo.com"
        },
        "important": false,
        "track_opens": null,
        "track_clicks": null,
        "auto_text": null,
        "auto_html": null,
        "inline_css": null,
        "url_strip_qs": null,
        "preserve_recipients": null,
        "bcc_address": "kamil@myemail.com",
        "tracking_domain": null,
        "signing_domain": null,
        "merge": true,
        "global_merge_vars": [
            {
                "name": "merge1"
            }
        ],
        "merge_vars": [
            {
                "rcpt": "myemail@gmail.com",
                "vars": [
                    {
                        "name": "merge2"
                    }
                ]
            }
        ],
        "tags": [
            "password-resets"
        ],
        "google_analytics_domains": [
            "mydomain.com"
        ],
        "google_analytics_campaign": "mandrill-sunday",
        "metadata": {
            "website": "www.mydomain.com"
        },
        "recipient_metadata": [
            {
                "rcpt": "myemail@gmail.com",
                "values": {
                    "user_id": 123456
                }
            }
        ]
    },
    "async": false
}

但我在发出的电子邮件中只收到了如下回复:

Hello *|name|*
4个回答

34

因为每个替换都需要两个字段:名称和内容。所以您的合并应该变成类似以下这样:

因为每个替换都需要两个字段:名称和内容。所以您的合并应该变成类似以下这样:

"vars": [
  {
     "name": "name",
     "content" : "merge2"
  }
]

31
这是不是只有我觉得这相当不寻常。为什么不简单地写成:"mergeTagName": "mergeTageContent"? - Anders Östman
4
起初看起来有些奇怪,但如果你考虑到这是JavaScript,它就变得更有意义了。冒号左侧的字符串值是接口定义的一部分,冒号右侧的字符串值是你传递给它的参数。 - Frank Rem

4

必须使用global_merge_vars

global_merge_vars': [{'content': 'merge1 content', 'name': 'name'}]

1
有什么区别,我们的可以使用全局合并变量,但不能使用模板内容? - Simon Nicholls

2

这里有两件事情可能会让你困扰。

1) (正如其他人所提到的)每个合并变量对象都有两个键值对,名称和内容:

'global_merge_vars': [
            {
                'name': 'fullName',
                'content': 'foo bar',
            },
            {
                'name': 'email',
                'content': 'foobar@gmail.com',
            }

 ],

2) 确保将您的合并语言设置为mailchimp或handlebars以供mandrill使用。

'merge_language': 'mailchimp',

来源:https://mandrillapp.com/api/docs/messages.python.html#method=send-template


你需要重新设计模板以使用handlebars。然而,问题中的OP语法“*|name|*”并不是handlebars。 - ceejayoz
那是Mailchimp的模板语言。我会进行编辑并默认使用Mailchimp。 - Braden Holt

0

我刚刚尝试了使用SMTP头部的被接受答案,但它并没有起作用。(我在这里使用Ruby(on Rails)编写)

headers['X-MC-MergeVars'] = [
  {name: 'name', content: 'pieter'}
].to_json

虽然最直接的方法可行。也许他们改变了什么或者SMTP头部工作方式不同?.. 这个方法可行:

headers['X-MC-MergeVars'] = {
  name: 'pieter'
}.to_json

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接