Фільтрація IMAP‑пошти — методи, критерії та приклади коду
Базова фільтрація повідомлень
The ImapClient class надає ListMessages() метод, який отримує всі повідомлення зі скриньки. Щоб отримати лише повідомлення, що відповідають певній умові, використовуйте перевантажений ListMessages() метод, який приймає MailQuery як аргумент. MailQuery клас надає різноманітні властивості для зазначення умов, наприклад, дата, тема, відправник, отримувач тощо. Перший приклад ілюструє, як фільтрувати повідомлення за датою та темою. Ми також показуємо, як фільтрувати за іншими критеріями та як будувати більш складні запити. API також забезпечує можливість застосовувати чутливі до регістру критерії пошуку для точного фільтрування. API також дозволяє вказувати кодування рядка пошуку для фільтрації повідомлень з поштової скриньки.
Фільтрація повідомлень у поштовій скриньці
- Підключитися та ввійти на IMAP сервер
- Створіть екземпляр MailQuery і встановити властивості
- Викличте ImapClient.ListMessages(MailQuery query) метод і передаєте MailQuery з параметрами для отримання лише відфільтрованих повідомлень.
Нижче наведений фрагмент коду показує, як підключитися до IMAP‑скриньки та отримати повідомлення, які надійшли сьогодні і містять слово "newsletter" у темі.
Фільтрація повідомлень за конкретними критеріями
Кодові приклади вище фільтрує повідомлення за темою листа та датою. Ми також можемо використовувати інші властивості для встановлення інших підтримуваних умов. Нижче наведено кілька прикладів встановлення умов за допомогою MailQuery. Наведені нижче фрагменти коду показують, як фільтрувати листи за:
- Сьогоднішня дата.
- Діапазон дат.
- Від конкретного відправника.
- З конкретного домену.
- Від конкретного отримувача.
Сьогоднішня дата
Нижче наведений фрагмент коду показує, як фільтрувати листи за сьогоднішньою датою.
Діапазон дат
Нижченаведений фрагмент коду показує, як фільтрувати електронні листи за діапазоном дат.
Конкретний відправник
Нижче наведений фрагмент коду показує, як фільтрувати листи за конкретним відправником.
Конкретний домен
Нижче наведений фрагмент коду показує, як фільтрувати листи за конкретним доменом.
Конкретний отримувач
Нижче наведений фрагмент коду показує, як фільтрувати листи за конкретним отримувачем.
Розширене створення запитів
Якщо різні 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);
Фільтрація повідомлень з підтримкою пагінації
The ImapClient надає можливість шукати повідомлення у поштовій скриньці та виводити їх зі підтримкою пагінації. Нижче наведений фрагмент коду показує, як фільтрувати повідомлення з підтримкою пагінації.