使用 C# 将 MHTML 转换为 HTML

Convert MHTML to HTML using C#

我的任务是将 mHtml 嵌入到电子邮件正文中。问题是 mhtml 不是普通的 html 文件,所以我无法将它直接嵌入到电子邮件中。

如何将 mhtml 转换为 html 文件?

谢谢

我在这个 link 上找到了解决方案:

Original (Dead) Link

Archived Link

解决方案是提取 MHTML.HTML 中编码为 Base64 的 HTML。

var decoded_text = new StringBuilder();
using (var reader = new StreamReader(mhtFile))
{
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        if (line != "Content-Transfer-Encoding: base64") continue;

        reader.ReadLine(); //chew up the blank line
        while ((line = reader.ReadLine()) != String.Empty)
            if (line != null)
                decoded_text.Append(
                    Encoding.UTF8.GetString(
                        Convert.FromBase64String(line)));
        break;
    }
}

我在文本编辑器 (notepad++) 中打开此页面中的 .mhtml,HTML 似乎在文件中,完好无损。您必须向下滚动到所有 CSS。我只想创建一些东西来从文件中提取 HTML 文本,而不是处理 base64 数据(如果某些东西不能正常工作,对我来说太混乱了)。

当 html 中没有变音符号(ěščřžýáíé - 例如捷克语变音符号或其他 2 字节字符)时,可接受的解决方案工作正常。如果此类字符的第一个字节位于变量 "line" 的末尾,第二个字节位于下一个变量的开头,则 html 结果中显示不可读字符。

        var base64_text = new StringBuilder();
        using (var reader = new StreamReader(mhtFile))
        {
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                if (line != "Content-Transfer-Encoding: base64") continue;

                reader.ReadLine(); //chew up the blank line
                while ((line = reader.ReadLine()) != String.Empty)
                    if (line != null)
                        base64_text.Append(line);
                break;
            }
            return Encoding.UTF8.GetString(Convert.FromBase64String(base64_text.ToString()));
        }