如何解码引用的可打印 e-mail header (使用 MimeKit)

How to decode a quoted printable e-mail header (with MimeKit)

我从一条 e-mail 消息中得到了这个 header:(只有一些 headers,来自日志文件,而不是整个消息)

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

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

其他相关事件是主题 header,我想我已经在其中看到类似这样的内容:

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

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

我需要一个简短的例子来说明如何转换这样的 header 字符串,这些字符串包含部分 quoted-printable 单词,包括指定的编码。人们希望在文档中找到的那种示例。实际上所有数据都在这里,但需要从一个字符串转换为另一个字符串。

Another hack using Attachment.CreateAttachmentFromString 在这里失败了。它可以解码整个 QP 字符串,但不能解码像这样的混合格式。

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

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

其次,您的示例 header 未使用 quoted-printable 编码,它使用 rfc2047 令牌编码,需要使用 Rfc2047.DecodeText():

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