Использование mailkit для получения цепочек электронной почты, возвращает только первое электронное письмо от разговора - PullRequest
0 голосов
/ 09 апреля 2020

Я разрабатываю почтовый клиент, используя mailkit. Мне нужно отображать электронные письма в виде разговоров, например, как они отображаются в клиентах веб-почты. Когда я пытаюсь получить данные с помощью mailkit для всей цепочки писем, я могу получить только первое электронное письмо от беседы.

Я проверил значение ImapCapabilitites.Thread с помощью mailkit, и он вернул 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 - это подпапка внутри папки входящих сообщений в в которой хранится почтовый поток.

1 Ответ

1 голос
/ 09 апреля 2020

Как правило, вам нужно всех сообщений, чтобы правильно их обработать.

Таким образом, ваш код должен выглядеть следующим образом:

var summaries = targetFolder.Fetch(0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.InternalDate | MessageSummaryItems.Envelope | MessageSummaryItems.References); 
var orderBy = new OrderBy[] { OrderBy.ReverseDate };
var threads = MessageThreader.Thread (summaries, ThreadingAlgorithm.References, orderBy);

Вы также Flags не нужен для их потоковой обработки, но поскольку вы сортируете по Date, может быть полезно воспользоваться InternalDate в качестве запасного варианта в случае, если заголовок Date сообщения не установлен.

...