解析 MIME 邮件类型

Posted

技术标签:

【中文标题】解析 MIME 邮件类型【英文标题】:Parsing MIME mail type 【发布时间】:2013-05-31 07:35:48 【问题描述】:

经过大量努力,我创建了自己的邮件解析器。现在成功地能够解析和显示电子邮件。但是很少有邮件特别是从苹果或iPhone发送的邮件在解析后会出现这样的情况。我不知道为什么会这样。请帮忙。

=D8=AA=D9=88=D8= =A7=D8=AC=D9=87=D9=86=D9=8A =D9=85=D8=B4=D9=83=D9=84=D8 =A9 =D8=A5=D8=B4=D8= =A7=D8=B1=D8=A9 =D9=84=D9=84=D9=83=D8=B1=D8=AA =D8=B1=D9= 82=D9=85 410814189= 68=D8=B9=D9=84=D9=85=D8=A7=D9=8B =D8=A8=D8=A3=D9=86 =D8=A5=D8=B4=D8 =

【问题讨论】:

如果我的回答对你有用,你能接受吗?谢谢! 有完整源代码的最终解决方案吗? 我刚刚设法为我的需要创建了一个。我找不到可以处理所有邮件类型的邮件。 【参考方案1】:

您的邮件解析器似乎无法处理 Quoted Printable 内容的解码。

我想如果您查看标题,您会发现这样的标题:

Content-Transfer-Encoding:quoted-printable

我已经编写了几个电子邮件客户端和多个 mime 解析器,目前正在编写一个新的 C# 中的 mime 解析器(其他的是 C),这里称为 MimeKit:http://github.com/jstedfast/MimeKit。您可能对此感兴趣...

我有一个可过滤的流类,您可以向其中添加一个 QuotedPrintableDecoder(我也实现了),然后通过它传递您的数据以对其进行解码。或者你可以直接通过 QuotedPrintableDecoder 传递它,这取决于对你来说最简单的方法。

示例用法:

var decoder = new QuotedPrintableDecoder ();
var output = new byte[decoder.EstimateOutputLength (input.Length)];
var outputLength = decoder.Decode (input, 0, input.Length, output);

// convert the output into a string displayable to the user...
var text = System.Text.Encoding.UTF8.GetString (output, 0, outputLength);

显然您会为内容使用正确的 System.Text.Encoding(通过查看 Content-Type 标头中的“charset”参数),而不是盲目地使用 System.Text.Encoding.UTF8。

【讨论】:

以上是关于解析 MIME 邮件类型的主要内容,如果未能解决你的问题,请参考以下文章

MIME类型

什么是mime类型

纯文本的 HTML 电子邮件 MIME 类型

如何在java中解析原始mime内容?

『速查手册』MIME 多用途互联网邮件扩展

『速查手册』MIME 多用途互联网邮件扩展