Mandrill可编辑模板:mc:编辑链接href

时间:2014-06-02 15:33:25

标签: html django hyperlink mailchimp mandrill

我尝试使用Mandrill模板发送订单跟踪电子邮件。

使用mc:edit可以很好地处理简单文本,例如<span mc:edit="ship_id">ship_id</span><br>

我想知道是否有办法在变量中传递href链接,即 tracking_url

<a class="mcnButton " title="Track order" href=tracking_url target="_blank" style="font-weight: bold;text-align: center;">Track Order</a>

我正在使用Djrill for Django,这是迄今为止发送电子邮件的代码,我想将tracking_url添加为template_content变量或类似的东西

msg = EmailMessage(subject="Track your order", from_email="admin@example.com", to=[user.email])
    msg.template_name = "order-sent"
    msg.template_content = {'order_id' : order_id, 'order_date' : order_date, 'order_type' : order_type, 'first_name' : user.first_name, 'last_name' : user.last_name, 'phone' : user.info.phone,
    'd_street' : d.street, 'd_zipcode' : d.zipcode, 'd_city' : d.city, 'd_country' : d.country}
    msg.send()

似乎可以使用AddGlobalVariable方法(阅读here),但我无法弄清楚如何使用它。

2 个答案:

答案 0 :(得分:4)

我有一个电子邮件调度程序,它使用MandripApp发送普通电子邮件(作为SMTP)以及使用模板发送电子邮件。

我不知道如何传递您的要求,因为我不再使用mc:edit属性(因为我的用户永远不会自己编辑模板,我或开发人员会这样做)但我可以为您提供全局变量的帮助。

全局变量与Mailchimp变量相同,如*|EMAIL|*,这就是我所做的:

var mergeVars = Dictionary<string, string>();
mergeVars.Add("ORDER_ID", orderId);
mergeVars.Add("CUSTOMER_NAME", fullname);
mergeVars.Add("CUSTOMER_FNAME", fullname.Contains(" ") ? fullname.Split(' ')[0] : fullname);
mergeVars.Add("CUSTOMER_EMAIL", email);

例如,一个孔表:

StringBuilder sb = new StringBuilder();
foreach (ProductInfo pi in products)
{
    sb.Append("<tr>");
    sb.AppendFormat("<td style=\"text-align:left;\"><img src=\"http://dynassets1.gavekortet.dk/{2}/products/trans/{1}_1.png\" alt=\"{0}\" /></td>", pi.Title, pi.ID, shopId);
    sb.AppendFormat("<td style=\"text-align:left;\">{0} x {1}</td>", pi.Qty, pi.Title);
    sb.AppendFormat("<td style=\"text-align:right;\">{0:N2}</td>", double.Parse(pi.CardValue));
    sb.Append("</tr>");
}

mergeVars.Add("ITEMS_LIST", sb.ToString());

在我的MandrillApp模板中,我只是(对于表格部分):

<table style="width: 100%; padding: 0 30px;">
    <thead>
      <tr>
        <th style="width:75px; text-align:left;">Gavekort</th>
        <th style="width:75px; text-align:left;">Ordreoversigt</th>
        <th style="width:75px; text-align:right;">Værdi (kr.)</th>
      </tr>
    </thead>

    <tbody>
        *|ITEMS_LIST|*
    </tbody>
</table>

并在代码中执行:

var tmplMessage = new MandrillSendTemplateItem();
tmplMessage.key = password;

tmplMessage.message = new MessageItem();

// Email Destination
tmplMessage.message.to = new List<MessageToItem>();
tmplMessage.message.to.Add(new MessageToItem() { name = destinationName, email = destinationEmail, type = "to" });
tmplMessage.message.to.Add(new MessageToItem() { name = "Bruno Alexandre", email = "my_email@domain.com", type = "bcc" }); // always send me a copy so I know what's going on

// Global Variables
tmplMessage.message.global_merge_vars = new List<TemplateContentItem>();
tmplMessage.message.global_merge_vars.Add(
    new TemplateContentItem() { 
        name = "TASKCOMPLETE", 
        content = DateTime.UtcNow.ToString("dd MMM yyyy HH:mm") });

// Global Variables passed in properties
if (properties != null)
{
    foreach (var p in properties)
    {
        tmplMessage.message.global_merge_vars.Add(
            new TemplateContentItem() { name = p.Key, content = p.Value });
    }
}

并发送电子邮件。

我希望它可以帮助你做你需要的事情。


注意您只在代码中传递全局变量的名称,但在模板中,您需要将其命名为|**|,以便:

tmplMessage.message.global_merge_vars.Add(
    new TemplateContentItem() { 
        name = "TASKCOMPLETE", 
        content = DateTime.UtcNow.ToString("dd MMM yyyy HH:mm") });

可在模板中访问:

<span class="completed">*|TASKCOMPLETE|*</span>

答案 1 :(得分:0)

这篇文章很老了,但我想我会分享我的答案以防万一其他人偶然发现。

如果您使用的是Mandrill API,则需要在“global_merge_vars”或“merge_vars”键中实际发送变量值。不要使用template_content。 Mandrill API以这种方式非常不直观。

因此,您的内容将与变量保持一致:

*|ITEMS_LIST|*

然后你的JSON正文应该有:

        "global_merge_vars": [
            {
                "name": "ITEMS_LIST",
                "content": "This is a list"
            }
        ],

来源:How to add params to all links in a mandrill template through API?