Фильтрация сообщений из почтового ящика Exchange
Фильтрация сообщений с использованием EWS
Интерфейс IEWSClient предоставляет метод ListMessages(), который получает все сообщения из почтового ящика. Чтобы получить только сообщения, соответствующие некоторым условиям, используйте перегруженный метод ListMessages(), принимающий класс MailQuery в качестве аргумента. Класс MailQuery предоставляет различные свойства для указания условий, например, дата, тема, отправитель и получатель. Кроме того, API также позволяет применять фильтры по учету регистра для извлечения писем из почтового ящика.
Фильтрация сообщений по критериям
Чтобы получить отфильтрованные сообщения из почтового ящика:
- Подключитесь к серверу Exchange.
- Создайте экземпляр MailQuery и установите желаемые свойства.
- Вызовите метод IEWSClient.ListMessages() и передайте MailQuery в параметрах, чтобы получить только отфильтрованные сообщения.
Следующий фрагмент кода показывает, как подключиться к IMAP почтовому ящику и получить сообщения, в которых в теме присутствует строка “Newsletter” и отправлены сегодня.
Фильтрация сообщений по сегодняшней дате
Следующий фрагмент кода показывает, как отфильтровать все электронные письма на основании сегодняшней даты.
Фильтрация сообщений по диапазону дат
Следующий фрагмент кода показывает, как отфильтровать все электронные письма на основании диапазона дат.
Фильтрация сообщений по конкретному отправителю
Следующий фрагмент кода показывает, как отфильтровать все электронные письма на основании конкретного отправителя.
Фильтрация сообщений по конкретному домену
Следующий фрагмент кода показывает, как отфильтровать все электронные письма на основании конкретного домена.
Фильтрация сообщений по конкретному получателю
Следующий фрагмент кода показывает, как отфильтровать все электронные письма на основании конкретного получателя.
Фильтрация сообщений по ID сообщения
Следующий фрагмент кода показывает, как отфильтровать все электронные письма на основании ID сообщения.
Фильтрация сообщений по всем уведомлениям о доставке почты
Следующий фрагмент кода показывает, как отфильтровать все электронные письма на основании всех уведомлений о доставке почты.
Фильтрация сообщений по размеру сообщения
Построение сложных запросов
Если различные свойства MailQueryBuilder установлены в отдельном выражении, все условия совпадают. Например, чтобы получить сообщение в определённом диапазоне дат и от конкретного хоста, напишите три выражения:
Объединение запросов с помощью AND
Следующий фрагмент кода показывает, как объединить запросы с помощью AND.
Объединение запросов с помощью OR
MailQueryBuilder предоставляет метод Or(), который принимает два экземпляра MailQuery в качестве параметров. Он получает сообщения, соответствующие любому из двух указанных условий. В примере ниже фильтруются сообщения, которые содержат слово “test” в теме или “noreply@host.com” в качестве отправителя. Следующий фрагмент кода показывает, как объединить запросы с помощью OR.
Фильтрация электронной почты с учетом регистра
Электронные письма могут фильтроваться с учетом регистра, используя флаг IgnoreCase в критериях фильтрации, как показано в следующем фрагменте кода.
Фильтрация сообщений с поддержкой постраничного просмотра
Сортировка отфильтрованных сообщений по возрастанию/убыванию
Фильтрация электронной почты может поддерживаться с сортировкой сообщений по возрастанию/убыванию. В этом случае используется метод OrderBy, чтобы указать порядок, в котором результаты поиска электронной почты сортируются с помощью класса MailQueryBuilder. Этот метод позволяет определить критерии сортировки для поискового запроса, указывая, должны ли результаты сортироваться по возрастанию или убыванию на основе конкретного свойства.
Метод принимает параметр ascending, который указывает порядок сортировки для указанного свойства. Если параметр ascending равен true, это означает, что результаты поиска должны быть отсортированы по возрастанию. Напротив, если параметр ascending равен false, это означает, что результаты поиска должны быть отсортированы по убыванию.
MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Report");
builder.InternalDate.Since(new DateTime(2020, 1, 1));
builder.Subject.OrderBy(true); // сортировать по возрастанию темы
builder.InternalDate.OrderBy(false); // сортировать по убыванию даты
MailQuery query = builder.GetQuery();
// Получить список сообщений
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);
В приведённом выше фрагменте кода метод OrderBy применяется дважды, один раз для темы и один раз для даты электронной почты. В результате выполнения метода ListMessages с переданным запросом мы получим список сообщений с темой, содержащей слово “Report”, которые были получены в указанную дату или позже. В то же время результаты будут отсортированы по теме в порядке возрастания. Это означает, что сообщения будут отсортированы в алфавитном порядке от A до Z в зависимости от их темы. Также результаты будут отсортированы по дате в порядке убывания. Это означает, что сообщения будут упорядочены от самых новых к самым старым.