Ответ 1
... самый очевидный ответ: "положи все в рамку"... это на самом деле будет работать?
Да, например Whiteout Networks GmbH WHITEOUT.IO делает это в /src/tpl/read.html и /src/js/controller/read-sandbox.js. Некоторые из проблем безопасности решаются с помощью DOMPurify
..there are tons of issues..Is there a good, safe way..?
Я знаю формат данных сообщения также под именами EML или MHTML, поэтому поиск хорошего "конвертера XY в HTML" или "средства просмотра документов HTML5 с поддержкой XY" может указать на пригодность для использования результаты (например, GroupDocs.Viewer)
Некоторые почтовые клиенты (например, GMail) не используют iframe
, вместо этого они используют анализатор почты (например, andris9/mailparser) и анализатор HTML (например, cheeriojs/cheerio) для извлечения подмножества e-mail-safe-html (см. Qaru: какие есть рекомендации по оформлению электронной почты в формате HTML? и Qaru: стилизация HTML-письма для GMail для некоторых примеров) или используйте HTML-дезинфицирующее средство (например, Google Caja, cure53/DOMPurify) и вставляйте код прямо на страницу.
Но это не всегда легко, нет единого мнения о том, что представляет собой подмножество e-mail-safe-html, и вы, конечно же, не захотите встроить потенциально зараженные вложения или запустить анонимные CORS скрипты внутри защищенный сеанс пользователя.
В любом случае, как всегда, изучение исходного кода различных почтовых клиентов (см. Wikipedia: Сравнение почтовых клиентов) - это способ выяснить это.