如何解码引用的可打印 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"));
我从一条 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"));