通过Hangfire Postal发送HTML邮件:HTML无法渲染问题求助
解决Hangfire中Postal邮件无法渲染tinyMCE HTML内容的问题
这个问题我之前碰到过类似的情况,核心原因就是Hangfire的运行上下文里没有MVC的HtmlHelper实例,所以直接用Html.Raw()肯定会报编译错误。下面给你几个可行的解决办法:
方案1:用MvcHtmlString包装HTML内容
在你的Postal邮件类里,把存储tinyMCE输出的属性改成MvcHtmlString类型,而不是普通的string:
public class MyEmail : Email { public MvcHtmlString RichContent { get; set; } // 其他邮件属性... }
然后在赋值的时候,把tinyMCE输出的HTML字符串包装成MvcHtmlString:
var email = new MyEmail { RichContent = new MvcHtmlString(tinyMceHtmlOutput), // 赋值其他属性... };
最后在邮件模板里直接输出这个属性就行,不用调用Html.Raw():
@model MyEmail <!-- 邮件其他内容 --> @Model.RichContent <!-- 邮件其他内容 -->
MvcHtmlString本身就会告诉Razor不要对内容进行HTML编码,直接渲染原始HTML,完美绕过没有Html对象的问题。
方案2:在模板中直接使用HtmlString
如果不想修改邮件类的属性类型,也可以在邮件模板里直接创建HtmlString来包装你的HTML内容:
@model MyEmail <!-- 邮件其他内容 --> @(new HtmlString(Model.RichContent)) <!-- 邮件其他内容 -->
HtmlString是MvcHtmlString的基类,同样能实现不编码输出HTML的效果,而且不需要改动后台代码。
重要提醒:注意XSS安全
不管用哪种方案,都要确保tinyMCE输出的HTML是安全的!如果内容来自用户输入,一定要开启tinyMCE自带的内容清理功能,或者用专门的HTML sanitization库过滤掉恶意代码,避免邮件中出现XSS攻击风险。
内容的提问来源于stack exchange,提问作者Darren Street
相关产品推荐
相关产品推荐

