Фильтрация электронной почты IMAP — методы, критерии и примеры кода
Базовая фильтрация сообщений
Этот ImapClient class предоставляет ListMessages() метод, который получает все сообщения из ящика. Чтобы получить только сообщения, соответствующие некоторому условию, используйте перегруженный ListMessages() метод, который принимает MailQuery в качестве аргумента. The MailQuery класс предоставляет различные свойства для указания условий, например, дату, тему, отправителя, получателя и т. д. Первый пример иллюстрирует, как фильтровать сообщения по дате и теме. Мы также показываем, как фильтровать по другим критериям и как строить более сложные запросы. API также обеспечивает возможность применять чувствительный к регистру поиск для точного соответствия критериям фильтрации. API также позволяет задавать кодировку строки поиска при фильтрации сообщений из почтового ящика.
Фильтрация сообщений из почтового ящика
- Подключиться и войти на IMAP‑сервер
- Создать экземпляр MailQuery и установить свойства
- Вызвать ImapClient.ListMessages(MailQuery query) метод и передайте MailQuery с параметрами для получения только отфильтрованных сообщений.
Ниже показан фрагмент кода, демонстрирующий, как подключиться к IMAP‑почтовому ящику и получить сообщения, полученные сегодня и содержащие слово "newsletter" в теме.
Фильтрация сообщений по определённым критериям
Приведённые выше образцы кода фильтрует сообщения по теме письма и дате. Мы также можем использовать другие свойства для задания поддерживаемых условий. Ниже приведены несколько примеров установки условий с использованием MailQuery. Ниже приведённые фрагменты кода показывают, как фильтровать письма по:
- Дата сегодня.
- Диапазон дат.
- От конкретного отправителя.
- От конкретного домена.
- От конкретного получателя.
Сегодняшняя дата
Ниже показан фрагмент кода, демонстрирующий, как фильтровать письма по дате сегодняшнего дня.
Диапазон дат
Следующий фрагмент кода показывает, как фильтровать письма по диапазону дат.
Конкретный отправитель
Ниже показан фрагмент кода, демонстрирующий, как фильтровать письма по конкретному отправителю.
Конкретный домен
Ниже показан фрагмент кода, демонстрирующий, как фильтровать письма по конкретному домену.
Конкретный получатель
Ниже показан фрагмент кода, демонстрирующий, как фильтровать письма по конкретному получателю.
Продвинутое построение запросов
Если разные MailQueryBuilder свойства задаются в отдельных операторах, затем все условия будут совпадать. Например, если мы хотим получить сообщения в диапазоне дат и от конкретного хоста, нам нужно написать три оператора.
Комбинировать запросы с 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. Ниже показан фрагмент кода, демонстрирующий, как указать кодировку для билдера запросов.
Пользовательские параметры фильтрации
Фильтрация сообщений с пользовательским флагом
Пользовательский поиск для фильтрации
Например, стандарт 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 обеспечивает возможность поиска сообщений в почтовом ящике и их вывод с поддержкой постраничного отображения. Ниже показан фрагмент кода, демонстрирующий, как фильтровать сообщения с поддержкой постраничного вывода.