【问题标题】:How to fetch all email headers without getting the entire message如何在不获取整个邮件的情况下获取所有电子邮件标头
【发布时间】:2017-03-17 23:28:37
【问题描述】:

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

Fetch (IList<UniqueId> uids, MessageSummaryItems items, HashSet<HeaderId> fields, CancellationToken cancellationToken = default (CancellationToken)).

我尝试使用此 fetch 和 HeaderId 中的所有枚举,但仍有相当多的标头没有被捕获。

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

【问题讨论】:

    标签: c# imap mailkit


    【解决方案1】:

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

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

    还有一个 Fetch 方法也采用 HashSet,因此您不仅限于 HeaderId 中可用的内容

    【讨论】:

    • 您好,感谢您的快速回复!不幸的是,当您使用空字符串调用 GetBodyPart 时,它不会返回所有标题。由于 'if (partSpecifier.Length == 0) { for (int i = entity.Headers.Count; i > 0; i--) { var header = entity.标头[i - 1]; if (!header.Field.StartsWith ("Content-", StringComparison.OrdinalIgnoreCase)) entity.Headers.RemoveAt (i - 1); } }' 在 imapfolder GetBodyPart 方法中。
    • 在我去添加GetMessage(bool headersOnly)之前,你为什么只想要标题?你拿他们做什么?
    • 我正在将自动电子邮件测试套件直接从 AE 邮件转换为 Mailkit,因为 Mailkit 具有附加功能。然而,由于性能原因,我们的许多测试都依赖于 AE 的 headersonly 标志,我希望尽可能直接进行转换。
    • 我刚刚在GitHub 的IMailFolder 中添加了一堆GetHeaders() 方法,但我还没有测试它们是否有效。随意获取源代码并为我测试:-)
    • 顺便说一句,我不确定我是保留GetHeaders() API 还是坚持使用GetBodyPart(bool headersOnly) API 并添加GetMessage(bool headersOnly)。两者各有优缺点...
    猜你喜欢
    • 2016-04-16
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2017-12-26
    • 2015-05-24
    • 2020-11-23
    • 2015-12-18
    相关资源
    最近更新 更多