C# MailKit 在树视图中获取消息 conversation/replies
C# MailKit get messages conversation/replies inside treeview
我正在尝试复制邮箱的视图,我尝试使用引用和线程但不起作用,somethimes thread has 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);
MessageThreader
class 使用 References
(其中包含一个 Message-Id
值的列表,可以追溯到线程的根)以构建树消息。显然,如果您提供给 MessageThreader
的消息摘要列表缺少其中一些引用,则返回的树将有一些空节点。这就是为什么某些所述节点具有 null
UniqueId
值的原因。
FWIW,给你一些提示:
不要做_uids.ToList()
- _uids
是已经一个IList<UniqueId>
,为什么要无缘无故复制它?
将orderBy
参数用于MessageThreader
更有效。
像这样:
var orderBy = new OrderBy[] { OrderBy.ReverseDate };
var threads = MessageThreader.Thread (summaries, ThreadingAlgorithm.References, orderBy);
我正在尝试复制邮箱的视图,我尝试使用引用和线程但不起作用,somethimes thread has 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);
MessageThreader
class 使用 References
(其中包含一个 Message-Id
值的列表,可以追溯到线程的根)以构建树消息。显然,如果您提供给 MessageThreader
的消息摘要列表缺少其中一些引用,则返回的树将有一些空节点。这就是为什么某些所述节点具有 null
UniqueId
值的原因。
FWIW,给你一些提示:
不要做
_uids.ToList()
-_uids
是已经一个IList<UniqueId>
,为什么要无缘无故复制它?将
orderBy
参数用于MessageThreader
更有效。
像这样:
var orderBy = new OrderBy[] { OrderBy.ReverseDate };
var threads = MessageThreader.Thread (summaries, ThreadingAlgorithm.References, orderBy);