如何获取 Mandrill/Mailchimp 模板以在合并标签中保留换行符

Posted

技术标签:

【中文标题】如何获取 Mandrill/Mailchimp 模板以在合并标签中保留换行符【英文标题】:How to get a Mandrill/Mailchimp template to preserve line breaks in a merge tag 【发布时间】:2015-10-01 03:01:02 【问题描述】:

我将 Djrill 与 mailchimp 模板一起使用。

我使用下面的这个 sn-p 将 merge_vars 推送到我的模板中:

 msg.global_merge_vars = 
 SNAME': fullname, 'SEMAIL': from_email,'SMESSAGE': message
            

消息 |SMESSAGE| 出现在电子邮件中,但没有保留换行符。我将如何在我的消息中保留换行符?

另外请不要使用 % autoescape on % 方法,因为模板是从 mailchimp 发送的

【问题讨论】:

Djrill 将 merge_vars 直接传递给 Mandrill,因此您真正要问的是如何获取 Mandrill/Mailchimp 模板以保留合并标记中的换行符。几个月前有人asked that,没有答案。您可以在模板中尝试<pre>*|SMESSAGE|*</pre> 之类的东西,或者您可以在Django 代码中使用<br> 将消息编码为html,然后在模板中使用*|HTML:SMESSAGE|*(但要注意脚本注入!)。 我添加了 .replace('\r\n',r).replace('\n\r',r).replace('\r',r).replace('\ n',r) 到我的 form.cleaned_data ,它似乎只需要声明 |SMESSAGE| 【参考方案1】:

好的,这对我有用,我在清理后的消息上做了一个 str 替换

r = '<br />'
message = form.cleaned_data['message'].replace('\r\n',r).replace('\n\r',r).replace('\r',r).replace('\n',r)

然后以同样的方式合并它

msg.global_merge_vars = 
 SNAME': fullname, 'SEMAIL': from_email,'SMESSAGE': message
            

并在我的 mailchimp 模板中声明它

<p> *|SMESSAGE|* </p>

【讨论】:

每当您生成 html 时,转义用户输入中的任何 html 都很重要。 Django 有一个可以使用的escape function。 (由于您的 html 将进入电子邮件,script injection 可能不是一个巨大 问题,但最好是安全的。另外,如果用户在消息。) 我想我也必须使用*|HTML:MESSAGE|*

以上是关于如何获取 Mandrill/Mailchimp 模板以在合并标签中保留换行符的主要内容,如果未能解决你的问题,请参考以下文章

Mandrill Mailchimp 如何在电子邮件正文中嵌入图像

Mandrill/MailChimp 替换退订链接

iOS 9 与第三方 Mandrill/MailChimp 深度链接

双模手机如何获取CDMA卡的IMSI号?

获取表的 ID 及其模尊重 Postgres 中同一表中的总行数

优化算法平衡粘液模算法 (ESMA)含Matlab源码 900期