2017-04-08 1 views
0

Je suis en train de répliquer la vue d'une boîte aux lettres, j'essaie d'utiliser des références et des threads mais ne fonctionne pas, quelque chose thread a uniqueid null.C# MailKit obtenir des messages de conversation/réponses à l'intérieur de treeview

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 - avez-vous lu la documentation? – jstedfast

+0

Oui j'ai lu, mais le message est dans le dossier, est montré après dans la liste pas ad enfant –

+0

Vous devez m'envoyer un exemple de test qui me montre exactement de quoi vous parlez. – jstedfast

Répondre

0

La classe MessageThreader utilise la References (qui Contin une liste de valeurs Message-Id remontant à la racine du fil) afin de construire l'arbre des messages. Évidemment, si la liste des résumés de messages que vous donnez au MessageThreader manque certaines de ces références, alors l'arbre retourné aura des noeuds vides. C'est pourquoi certains desdits noeuds ont une valeur nullUniqueId.

FWIW, quelques conseils pour vous:

  1. Ne pas faire _uids.ToList()-_uids est-déjà un IList<UniqueId>, pourquoi le dupliquer pour aucune raison? Il est plus efficace d'utiliser l'argument orderBy pour MessageThreader.

Comme ceci:

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