2017-04-08 62 views
0

我試圖複製郵箱的視圖,我嘗試使用引用和線程,但不工作,somethimes線程有uniqueid null。C#MailKit獲取消息對話/回覆裏面樹視圖

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); 
+0

http://www.mimekit.net/docs/html/P_MailKit_MessageThread_UniqueId.htm - 你閱讀文件? – jstedfast

+0

是的,我閱讀,但消息是在文件夾內,是在列表中顯示不是廣告兒童 –

+0

你必須給我一個樣本測試案例,告訴我你到底在說什麼。 – jstedfast

回答

0

MessageThreader類使用References(其CONTIN Message-Id值追溯至螺紋的根部的列表),以構建的消息的樹。顯然,如果給MessageThreader的消息摘要列表缺少一些引用,那麼返回的樹將會有一些空的節點。這就是爲什麼一些所述節點具有nullUniqueId值。

FWIW,爲你的一些技巧:

  1. 不要做_uids.ToList() - _uids已經IList<UniqueId>,爲什麼重複它沒有理由?

  2. orderBy的參數用於MessageThreader會更有效。

像這樣:

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