IMAP филтриране на имейли – методи, критерии и примерен код

Основно филтриране на съобщения

Този ImapClient клас предоставя ListMessages() метод, който получава всички съобщения от пощенска кутия. За да получите само съобщения, отговарящи на някои условия, използвайте претоварения ListMessages() метод, който приема MailQuery като аргумент.  MailQuery класът предоставя различни свойства за задаване на условия, например дата, тема, изпращач, получател и т.н. Първият пример илюстрира как да се филтрират съобщения въз основа на дата и тема. Също така показваме как да се филтрират по други критерии и как да се построят по-сложни заявки. API‑тата също предоставят възможност за прилагане на критерии за търсене, чувствителни към регистъра, за точно съвпадение. API‑тата също позволяват задаване на кодирането на низа за търсене при филтриране на съобщения от пощенската кутия.

Филтриране на съобщения от пощенска кутия

  1. Свържете се и влезте в IMAP сървър
  2. Създайте инстанция на MailQuery и задайте свойствата
  3. Извикайте ImapClient.ListMessages(MailQuery query) метод и предайте MailQuery с параметрите за получаване само на филтрирани съобщения.

Следният кодов фрагмент показва как да се свържете с IMAP пощенска кутия и да получите съобщения, които са пристигнали днес и имат думата "newsletter" в темата.

Филтриране на съобщения по конкретни критерии

Кодовите примери по-горе филтрира съобщенията според темата и датата на имейла. Можем да използваме други свойства, за да зададем други поддържани условия също. По-долу са някои примери за задаване на условия, използвайки MailQuery. Следващите кодови фрагменти показват как да се филтрират имейли за:

  1. Днешната дата.
  2. Диапазон от дати.
  3. От конкретен изпращач.
  4. От конкретен домейн.
  5. От конкретен получател.

Днешна дата

Следният кодов фрагмент показва как да се филтрират имейли за днешната дата.

Диапазон от дати

Следният кодов фрагмент ви показва как да филтрирате имейлите по диапазон от дати.

Конкретен изпращач

Следният кодов фрагмент показва как да се филтрират имейли за конкретен изпращач.

Конкретен домейн

Следният кодов фрагмент показва как да се филтрират имейли за конкретен домейн.

Конкретен получател

Следният кодов фрагмент показва как да се филтрират имейли за конкретен получател.

Разработване на разширени заявки

Ако различни MailQueryBuilder свойствата се задават в отделни изрази, след което всички условия ще бъдат изпълнени. Например, ако искаме да получим съобщения между даден диапазон от дати и от конкретен хост, трябва да напишем три израза.

Комбиниране на заявки с AND

Следният кодов откъс показва как да комбинирате заявки с AND.

Комбиниране на заявки с OR

MailQueryBuilder предоставя Or() метод, който приема две MailQuery инстанции като параметри. Той получава съобщения, които отговарят на всяко от двете зададени условия. Следният кодов фрагмент показва как да се филтрират съобщения, които имат „test“ в темата или „noreply@host.com“ като изпращач. Следният кодов фрагмент показва как да комбинирате заявки с OR.

Филтриране въз основа на InternalDate

Съобщения могат да се извлекат от сървъра въз основа на InternalDate, но понякога сървърът не връща всички съобщения, видими в пощенската кутия. Причината може да бъде часовата зона на сървъра, тъй като той не е винаги UTC, както при Gmail. Aspose изпраща команди като 008 SEARCH ON 4-May-2014 съгласно IMAP протокол въпреки това резултатът може да се различава поради настройките на часовата зона на сървъра. Нов член е добавен в ImapMessageInfo as InternalDate което допълнително помага при филтрирането на съобщения. Следният кодов фрагмент показва използването на InternalDate за филтриране на съобщения.

Чувствително към регистъра филтриране

Следният кодов фрагмент показва как да се използва филтриране на имейли с чувствителност към регистъра.

Задаване на кодиране за конструктор на заявки

API‑тата ImapQueryBuilder конструкторът може да се използва за задаване на кодирането за низ за търсене. Това също може да се зададе чрез DefaultEncoding свойство на MailQueryBuilder. Следният кодов фрагмент показва как да се зададе кодирането за конструктор на заявки.

Персонализирани опции за филтриране

Филтриране на съобщения с персонализиран флаг

Персонализирано търсене за филтриране

Например, стандартът RFC 3501 не позволява търсене на съобщения въз основа на наличието на прикачени файлове в съобщенията. Но Gmail предоставя IMAP разширения които позволяват извършване на таково търсене. Следният кодов фрагмент показва как да създадете съответната заявка.

ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.CustomSearch("X-GM-RAW \"has:attachment\"");

MailQuery mailQuery = queryBuilder.GetQuery();
ImapMessageInfoCollection messageInfoCollection = imapClient.ListMessages(mailQuery);

Филтриране на съобщения с поддръжка на странициране

Този ImapClient осигурява възможност за търсене на съобщения от пощенската кутия и изброяването им с поддръжка на странициране. Следният кодов фрагмент показва как да се филтрират съобщения с поддръжка на странициране.