我正在使用 MailKit 库从 MS Exchange 邮箱读取电子邮件。这是我的代码
var client = new ImapClient();
///...
client.Authenticate(saslMechanism);
client.Inbox.Open(FolderAccess.ReadWrite);
var uids = client.Inbox.Search(SearchQuery.NotSeen);
var items = client.Inbox.Fetch(uids, MessageSummaryItems.All | MessageSummaryItems.BodyStructure);
foreach(var item in items) {
// Here I had wron decoded characters in some emails
Console.WriteLine(item.Envelope.Subject);
}
/// ...
部分信息编码错误
有什么方法可以强制 mailkit 在从服务器接收到消息时以某种编码重新编码
不幸的是没有。
Envelope 数据结构不保留从服务器接收到的原始字节数据,因此它不能尝试使用不同的字符集编码再次决定它。
您可以做的是修改您的获取请求以获取主题标题(除了或代替信封)然后使用:
int index = item.Headers.IndexOf(HeaderId.Subject);
Header header = item.Headers[index];
string subject = header.GetValue(“charset name goes here”);
我这样解决了问题 将 MailKit NuGet 包授权降级为 2.15.0
<PackageReference Include="MailKit" Version="2.15.0" />
在此之前,项目使用的是最新版本