使用 mailkit 检索电子邮件链,returns 仅对话的第一封电子邮件

Using mailkit to retrieve email chains, returns only the first email of the conversation

我正在使用 mailkit 开发电子邮件客户端。我需要将电子邮件显示为对话,就像它在网络邮件客户端中的显示方式一样。当我尝试使用 mailkit 获取完整电子邮件线程的数据时,我只能检索对话的第一封电子邮件。

我已经使用 mailkit 检查了 ImapCapabilitites.Thread 值,但它返回了 false。所以我试图获取一个包含 3 条消息的电子邮件线程,我只得到第一条消息作为输出,线程对象的子对象计数始终为零。请检查下面的代码,如果我遗漏了任何需要传递的标志,请告诉我

var summaries = targetFolder.Fetch(requestFilter, MessageSummaryItems.Envelope | MessageSummaryItems.Flags | MessageSummaryItems.References); 
var orderBy = new OrderBy[] { OrderBy.ReverseDate };
var threads = MessageThreader.Thread (summaries, ThreadingAlgorithm.References, orderBy);

其中 requestFilter 是一个 IList<UniqueId>targetFolder 是收件箱中存储邮件线程的子文件夹。

一般来说,您需要所有 条消息才能正确地串接它们。

因此您的代码应如下所示:

var summaries = targetFolder.Fetch(0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.InternalDate | MessageSummaryItems.Envelope | MessageSummaryItems.References); 
var orderBy = new OrderBy[] { OrderBy.ReverseDate };
var threads = MessageThreader.Thread (summaries, ThreadingAlgorithm.References, orderBy);

您也不需要 Flags 将它们串起来,但由于您按 Date 排序,因此抓住 InternalDate 作为后备可能会有所帮助,以防万一未设置消息的 Date header。