C# 如何在不获取整个邮件的情况下获取所有电子邮件标题

C# 如何在不获取整个邮件的情况下获取所有电子邮件标题,c#,imap,mailkit,C#,Imap,Mailkit,有没有办法只获取Mailkit中电子邮件的所有标题?在AE mail中,有一个headersonly标志将调用imap BODY.PEEK[HEADER]查询,但在Mailkit中,似乎只能通过使用指定所需的头来获取头 Fetch (IList<UniqueId> uids, MessageSummaryItems items, HashSet<HeaderId> fields, CancellationToken cancellationToken = default

有没有办法只获取Mailkit中电子邮件的所有标题?在AE mail中,有一个headersonly标志将调用imap BODY.PEEK[HEADER]查询,但在Mailkit中,似乎只能通过使用指定所需的头来获取头

Fetch (IList<UniqueId> uids, MessageSummaryItems items, HashSet<HeaderId> fields, CancellationToken cancellationToken = default (CancellationToken)).
Fetch(IList UID、MessageSummaryItems、HashSet字段、CancellationToken CancellationToken=default(CancellationToken))。
我尝试使用这个fetch和HeaderId中的所有枚举,但是仍然有相当多的头没有被捕获


我还注意到GetBodyPart有一个headersonly标志,但它需要一个bodypart作为输入。

如果将文件夹强制转换为
ImapFolder
,则可以调用:

var entity = ((ImapFolder) folder).GetBodyPart (uid, string.Empty, true);
var headers = entity.Headers;

还有一种获取方法也采用哈希集,因此您不仅限于HeaderId中可用的内容。如果将文件夹强制转换为
ImapFolder
,您可以调用:

var entity = ((ImapFolder) folder).GetBodyPart (uid, string.Empty, true);
var headers = entity.Headers;

还有一个Fetch方法也需要HashSet,因此您不仅限于HeaderId中提供的内容

您好,感谢您的快速响应!不幸的是,当您使用空字符串调用GetBodyPart时,它不会返回所有的头。它将只返回以“Content-”开头的头,原因是“if(partSpecifier.Length==0){for(int i=entity.headers.Count;i>0;i--){var header=entity.headers[i-1];if(!header.Field.StartsWith(“Content-”,StringComparison.OrdinalIgnoreCase))entity.headers.RemoveAt(i-1);}”'在imapfolder GetBodyPart方法中。在我开始添加
GetMessage(bool headersOnly)
之前,为什么只需要标题?你在用它们做什么?我正在将自动电子邮件测试套件直接从AE mail转换为Mailkit,因为Mailkit增加了功能。然而,由于性能原因,我们的许多测试都依赖于AE的headersonly标志,我希望进行尽可能直接的转换。我刚刚在IMailFolder in中添加了一组GetHeaders()方法,但我还没有测试它们是否有效。请随意获取源代码并为我测试:-)顺便说一句,不确定我是否会保留
GetHeaders()
API或坚持使用
GetBodyPart(bool headersOnly)
API并添加
GetMessage(bool headersOnly)
。两者都有优点和缺点…您好,谢谢您的快速回复!不幸的是,当您使用空字符串调用GetBodyPart时,它不会返回所有的头。它将只返回以“Content-”开头的头,原因是“if(partSpecifier.Length==0){for(int i=entity.headers.Count;i>0;i--){var header=entity.headers[i-1];if(!header.Field.StartsWith(“Content-”,StringComparison.OrdinalIgnoreCase))entity.headers.RemoveAt(i-1);}”'在imapfolder GetBodyPart方法中。在我开始添加
GetMessage(bool headersOnly)
之前,为什么只需要标题?你在用它们做什么?我正在将自动电子邮件测试套件直接从AE mail转换为Mailkit,因为Mailkit增加了功能。然而,由于性能原因,我们的许多测试都依赖于AE的headersonly标志,我希望进行尽可能直接的转换。我刚刚在IMailFolder in中添加了一组GetHeaders()方法,但我还没有测试它们是否有效。请随意获取源代码并为我测试:-)顺便说一句,不确定我是否会保留
GetHeaders()
API或坚持使用
GetBodyPart(bool headersOnly)
API并添加
GetMessage(bool headersOnly)
。两者都有优点和缺点。。。