如何在 Web 应用程序中显示 HTML 电子邮件?

How to display an HTML email in a web application?

提问人:Merc 提问时间:10/22/2014 更新时间:9/6/2019 访问量:10269

问:

我编写了一个通过IMAP获取电子邮件的Web应用程序。我现在需要向用户显示这些电子邮件。 我以为这很简单(我在支持 HTML 的浏览器中显示 HTML),直到我稍微研究了一下......并发现存在大量问题,例如:

  • Javascript & 安全性
  • 打破风格
  • 当然更多

有没有一种好的安全的方法来显示 HTML 电子邮件?我会错误地认为“安全”而不是“华丽”,即使我不想只显示电子邮件的文本版本(无论如何都不能保证在那里......

我意识到最明显的答案是“把所有东西都放在一个框架里”——真的是这样吗?它真的会起作用吗?

我正在使用 Node 服务器端,如果它有帮助......

JavaScript HTML 电子邮件 MIME

评论


答:

15赞 xmojmr 11/21/2014 #1

..最明显的答案是“把所有东西都放在一个框架里”......它真的会起作用吗?

是的,例如 Whiteout Networks GmbH 的 WHITEOUT。IO/src/tpl/read.html 和 /src/js/controller/read-sandbox.js 中执行此操作。一些安全问题由 DOMPurify 处理

..有很多问题..有没有一个好的安全的方法..?

我也知道名称为 EMLMHTML 的消息数据格式,因此寻找一个好的“XY 到 HTML 转换器”或“支持 XY 的 HTML5 文档查看器”可能会为您指出可用的结果(例如 GroupDocs.Viewer)

一些电子邮件客户端(例如 GMail)不使用 ,而是使用邮件解析器(例如 andris9/mailparser)和 HTML 解析器(例如 cheeriojs/cheerio)来提取 e-mail-safe-html 子集(参见 Stack Overflow:HTML 电子邮件设计有哪些准则?和 Stack Overflow:GMail 设置 html 电子邮件样式以获取一些示例)或使用 HTML 清理器(例如 Google 的 Cajacure53/DOMPurify)并将代码直接嵌入到页面中。iframe

但这并不总是一件容易的事情,对于什么构成 e-mail-safe-html 子集没有达成共识,您当然不会内联可能受感染的附件,也不会在受保护用户的会话中运行匿名 CORS 脚本。

无论如何,一如既往,研究各种电子邮件客户端的源代码(参见维基百科:电子邮件客户端的比较)是找出答案的方法。

评论

2赞 Merc 11/22/2014
只要它提到 Google 的 Caja code.google.com/p/google-caja/wiki/JsHtmlSanitizer,就会接受答案,这是解决我问题的关键
0赞 xmojmr 11/22/2014
@Merc在这种情况下,你可以接受你自己的 stackoverflow.com/help/self-answer,如果它能带来一些有用的东西,就给我投赞成票
0赞 Merc 11/22/2014
你的答案太棒了,我认为它应该是公认的答案!请添加对 caja 的快速参考,仅此而已!
0赞 xmojmr 11/22/2014
@Merce完成了。不过,如果您已经知道答案是什么以及在您的应用程序中什么真正适合您,那么发布一个实用的自我答案可能对未来的读者有用
2赞 Søren Pedersen 9/6/2019
Google Caja Compiler 项目现已移至此处:developers.google.com/caja