服务器端呈现HTML文本(使用DB中的HTML标记写入)作为电子邮件中的有效html

时间:2017-01-24 23:12:01

标签: meteor

一方面

我在一个集合中有一个字段will,用户可以在其中保存html文本(通过WYSIWYG编辑器):它工作正常,用户可以编写/保存一些像这样的字符串it's<strong>bold</strong> and sometimes <i>italic</i>.没有什么疯狂的..

另一方面

当用户通过电子邮件(作为will的一部分)通过html模板中的emailData呈现此字段meteorhacks:ssr时,该字段显示为it's<strong>bold</strong> and sometimes <i>italic</i>., HTML标记为普通文本。

所以,任何人都知道在html电子邮件正文中呈现的技巧:'它是粗体,有时斜体。'?感谢。

我的代码非常复杂,很多const和一系列函数,但除了html渲染之外,它工作正常,最终结构如下:

SSR.compileTemplate('htmlEmail', Assets.getText('replycontact.html'));

var emailData = {
  message: `${message}`,
  will: `${will}`,
  origincontactdate: `${origincontactdate}`,
  contactname: `${contactname}`,
};

//send the mail
Email.send({
  to: to,
  from: from,
  subject: subject,
  html: SSR.render('htmlEmail', emailData),
});

2 个答案:

答案 0 :(得分:1)

问题在于Meteor正在逃避HTML字符串。

因此,解决方案是使用3个括号{{{ }}}而不是2 - 此处为html模板中的emailData:而不是{{will}},请使用{{{will}}}。< / p>

问题中的上述代码保持不变。

来源:https://stackoverflow.com/a/16565529/7281870

答案 1 :(得分:0)

您的数据很可能被保存为数据库中的HTML编码,例如

<b>

保存为

&lt;b&gt;

如果是这样,你只需要使用Javascript decodeURI()函数取消编码,你可以在这里阅读更多信息:

http://www.w3schools.com/jsref/jsref_decodeuri.asp

所以你的代码看起来像这样:

var emailData = {
  message: `${message}`,
  will: decodeURI(${will}),
  origincontactdate: `${origincontactdate}`,
  contactname: `${contactname}`,
};

//send the mail
Email.send({
  to: to,
  from: from,
  subject: subject,
  html: SSR.render('htmlEmail', emailData),
});