使用 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。
我正在使用 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。