You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:34:34