c# - 如何解码引用的可打印电子邮件标题(使用 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 的解决方案,我也很乐意接受!
解决方案
当您使用MimeMessage.Load () 解析消息时,您不需要解码标头,因为 MimeKit 会为您完成。
其次,您的示例标头不是使用quoted-printable 编码的,而是使用rfc2047 令牌编码的,需要使用Rfc2047.DecodeText () 进行解码:
var decoded = Rfc2047.DecodeText (Encoding.ASCII.GetBytes ("Hello =?UTF-8?B?TmFtZSDDpMO2w7w=?= more words"));
推荐阅读
- wordpress - Woocommerce 中的产品附加复选框 Max 2
- java - 函数执行缓慢 - DataOutPutStream
- kotlin - 在 Kotlin 中,如果将一个对象传递给一个类的新实例,然后某些属性发生了变化,那么它会在原始对象中发生变化吗?
- c# - 如何在 ASP.NET 中的代码中动态创建文件下载链接?
- javascript - WooCommerce API 中的 Post 方法未授权 401
- java - 无法实例化类 - Selenium WebDriver (TestNG)
- git - 在未来几个月从存储库中移动所有提交
- java - Java/Jackson:使用 HashMap 将 JSON 反序列化为类
- cython - 如果 PyObject 是 Cython 函数,则检查 C
- arrays - 由数组定义的打字稿类型