我尝试使用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),但我无法弄清楚如何使用它。
答案 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?