Фильтрация сообщений с сервера с использованием 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 добавлен новый член InternalDate, который дополнительно помогает фильтровать сообщения. Следующий фрагмент кода показывает использование InternalDate для фильтрации сообщений.

Фильтрация электронных писем с учётом регистра

Следующий фрагмент кода показывает, как использовать фильтрацию электронных писем с учетом регистра.

Указать кодировку для построителя запросов

Конструктор API ImapQueryBuilder может быть использован для указания кодировки для строки поиска. Это также может быть установлено с помощью свойства DefaultEncoding MailQueryBuilder. Следующий фрагмент кода показывает, как указать кодировку для построителя запросов.

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

ImapClient предоставляет возможность искать сообщения из почтового ящика и перечислять их с поддержкой страниц. Следующий фрагмент кода показывает, как фильтровать сообщения с поддержкой страниц.

Фильтрация сообщений с использованием пользовательского флага

Фильтрация сообщений с использованием пользовательского поиска

Например, стандарт RFC 3501 не позволяет выполнять поиск сообщений на основе наличия вложений в сообщениях. Но Gmail предоставляет IMAP-расширения, которые позволяют выполнять такой поиск. Следующий фрагмент кода показывает, как сделать соответствующий запрос.

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

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