#c# #.net-core #imap #mailkit
#c# #.net-ядро #imap #mailkit
Вопрос:
Я использую клиент MailKit librairy, чтобы использовать их протокол IMAP для чтения моих писем и поиска в нем определенного письма. Это хорошо работает для последней почты (менее полутора месяцев). Но когда я пытаюсь найти электронное письмо, содержащее «myWordToSearch» за долгое время (6 месяцев или что-то в этом роде), оно говорит мне, что его не существует, потому что оно не проникает так глубоко в письма. Есть ли способ получить / прочитать ВСЕ электронные письма, чтобы отфильтровать их (например, панель поиска в gmail или что-то в этом роде)?
Вот мой код :
using (var client = new ImapClient())
{
using (var cancel = new CancellationTokenSource())
{
client.Connect("imap." provider , 993, true, cancel.Token);
client.Authenticate(myMail, myPassword, cancel.Token);
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadOnly, cancel.Token);
var mail = (SearchQuery.SubjectContains(myWordToSearch));
foreach (var uid in inbox.Search(mail, cancel.Token))
{
var message = inbox.GetMessage(uid, cancel.Token);
}
}
}
Комментарии:
1. Откуда их читать? Ваш поставщик электронной почты возвращает эти электронные письма через IMAP в первую очередь? Или у них есть 6-месячное ограничение на поиск, чтобы уменьшить их рабочую нагрузку?
2. Одно из моих писем @gmail.com (imap.gmail.com ). Могут ли они на самом деле ограничить свою рабочую нагрузку IMAP, ограничив возраст почты? Я считаю, что электронные письма, которые находятся на второй странице и , не отображаются. Но когда вы используете IMAP на своем телефоне для получения своих писем, вы получаете их все или?
3. Вы можете загрузить все метаданные и выполнить поиск самостоятельно, но это гораздо более дорогостоящая операция.
4. Вы открываете
client.Inbox
, поэтому, конечно, он не выполняет поиск по всему. Он просматривает входящие. Вместо этого попробуйте открыть папку «Вся почта».