【发布时间】:2020-04-09 22:28:55
【问题描述】:
我正在使用 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 是收件箱内存储邮件线程的子文件夹。
【问题讨论】:
-
targetFolder.Fetch()中返回了多少条消息?它是否包含线程中的所有消息?我猜它不是从它的声音。请记住,所有 MessageThreader.Thread() 所做的只是将属于同一“对话”的消息分组在一起,它不会再去获取它们。 -
targetFolder.Fetch() 中只返回一条消息,因为我在 requestFilter 中只有一个 uniqueId。
-
MessageThreader.Thread() 至少需要对话中的所有消息。如果你只给它 1 条消息,它只能返回 1 条带有 0 个孩子的消息。