C#MailKit在treeview中获取消息对话/回复

时间:2017-04-08 16:57:01

标签: c# mailkit

我试图复制邮箱的视图,我尝试使用引用和线程但不起作用,某些线程的uniqueid为null。

   foreach (var rfr in Message.References ?? new MimeKit.MessageIdList())
        {
            var _uids = Imap.Inbox.Search(SearchQuery.HeaderContains("Message-Id", rfr));

            if (_uids.Count > 0)
            {
                var _messages = Imap.Inbox.Fetch(_uids.ToList(), MessageSummaryItems.Envelope | MessageSummaryItems.Flags).OrderByDescending(o => o.Date);

                foreach (var msg in _messages)
                {
                    _Added.Add(msg.UniqueId);

                    RequestModel _model = new RequestModel
                    {
                        Address = msg.Envelope.From.Mailboxes.FirstOrDefault().Name ?? msg.Envelope.From.Mailboxes.FirstOrDefault().Address,
                        Subject = msg.Envelope.Subject,
                        Date = msg.Date.ToLocalTime().ToString(),
                        IsSeen = msg.Flags.Value.HasFlag(MailKit.MessageFlags.Seen),
                        Childs = new List<Scratch.MainWindow.RequestModel>(),
                    };

                    _retValue.Add(_model);
                }
            }
        }

var _messages = _imapClient.Inbox.Fetch(_uids.ToList(), MessageSummaryItems.Envelope | MessageSummaryItems.Flags | MessageSummaryItems.References).OrderByDescending(o => o.Date).Take(50);
            var _threads = MessageThreader.Thread(_messages, ThreadingAlgorithm.References);

1 个答案:

答案 0 :(得分:0)

MessageThreader类使用References(其中Message-Id值列表追溯到线程的根目录)以构造消息树。显然,如果您提供给MessageThreader的消息摘要列表缺少某些引用,则返回的树将有一些空节点。这就是为什么一些所述节点具有null UniqueId值。

FWIW,为您提供一些提示:

  1. 不要_uids.ToList() - _uids 已经 IList<UniqueId>,为何无缘无故重复?

  2. orderBy参数用于MessageThreader会更有效。

  3. 像这样:

    var orderBy = new OrderBy[] { OrderBy.ReverseDate };
    var threads = MessageThreader.Thread (summaries, ThreadingAlgorithm.References, orderBy);