【问题标题】:Why does Mandrill not recognize my merge tags?为什么 Mandrill 无法识别我的合并标签?
【发布时间】:2013-06-20 06:35:45
【问题描述】:

我正在使用 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' var 仍未填充,知道为什么吗?

{
    "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|*

【问题讨论】:

    标签: mailchimp mandrill


    【解决方案1】:

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

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

    【讨论】:

    • 只有我一个人认为这是非常规的。为什么不简单:"mergeTagName": "mergeTageContent"
    • 乍一看似乎。但如果你认为这是 JavaScript,那就更有意义了。冒号左边的字符串值是接口定义的一部分。冒号右边的字符串值就是你传递给它的值。
    【解决方案2】:

    必须使用global_merge_vars

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

    【讨论】:

    • 有什么区别,我们使用的是全局合并变量而不是模板内容?
    【解决方案3】:

    这里有两件事会让你绊倒。

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

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

    2) 确保将您的合并语言设置为 mailchimp 或 mandrill 的车把。

    'merge_language': 'mailchimp',
    

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

    【讨论】:

    • 不过,您需要重新设计模板以使用把手。问题中的 OP 语法 *|name|* not 车把。
    • 这是 mailchimp 的模板语言。我将编辑并默认为 mailchimp
    【解决方案4】:

    我刚刚尝试使用 SMTP 标头接受答案,但它不起作用。 (我在这里用 Ruby(on Rails)编写)

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

    虽然最直接的方法有效。也许他们更改了某些内容或 SMTP 标头的工作方式不同?.. 这有效:

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

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2013-10-23
      • 2015-01-11
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2022-01-05
      • 2015-12-26
      相关资源
      最近更新 更多