首页 > 解决方案 > 如何解码引用的可打印电子邮件标题(使用 MimeKit)

问题描述

我从电子邮件中获得了这个标题:(仅某些标题,来自日志文件,而不是整个邮件)

From: =?UTF-8?B?TmFtZSDDpMO2w7w=?= <test@example.com>

如何将“发件人:”之后的部分解码为我将其输入到 Thunderbird 以发送消息时的 Unicode 字符串?

其他相关事件是我认为我已经看到过这样的主题标题:

Subject: Hello =?UTF-8?B?TmFtZSDDpMO2w7w=?= more words

我已经QuotedPrintableDecoder在 MimeKit 中找到了这个类,但不知道如何使用它。似乎希望我让它猜测解码的字节数,然后将字节从希望足够大的缓冲区转换为字符串,但没有告诉我要使用什么编码。

我需要一个简短的示例来说明如何转换包含部分引用的可打印单词(包括指定的编码)的此类标头字符串。人们期望在文档中找到的那种示例。实际上所有数据都在这里,但需要从一个字符串转换为另一个字符串。

另一个黑客使用Attachment.CreateAttachmentFromString在这里失败。它可以解码整个 QP 字符串,但不能解码像这样的混合格式。

PS:如果 .NET Core 3.1 或 5.0 中有不需要 MimeKit 的解决方案,我也很乐意接受!

标签: c#.netmimekitquoted-printable

解决方案


当您使用MimeMessage.Load () 解析消息时,您不需要解码标头,因为 MimeKit 会为您完成。

其次,您的示例标头不是使用quoted-printable 编码的,而是使用rfc2047 令牌编码的,需要使用Rfc2047.DecodeText () 进行解码:

var decoded = Rfc2047.DecodeText (Encoding.ASCII.GetBytes ("Hello =?UTF-8?B?TmFtZSDDpMO2w7w=?= more words"));

推荐阅读