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

Фильтрация сообщений с помощью EWS

The IEWSClient интерфейс обеспечивает ListMessages() метод, который получает все сообщения из почтового ящика. Чтобы получать только сообщения, соответствующие определенному условию, используйте перегруженный ListMessages() метод, который принимает MailQuery класс в качестве аргумента. MailQuery класс предоставляет различные свойства для указания условий, например даты, темы, отправителя и получателя. Кроме того, API также позволяет применять фильтры, учитывающие регистр символов, для получения писем из почтового ящика.

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

Чтобы получить отфильтрованные сообщения из почтового ящика, выполните следующие действия:

  1. Подключитесь к серверу Exchange.
  2. Создайте экземпляр MailQuery и задайте нужные свойства.
  3. Позвоните IEWSClient.ListMessages() метод и передайте MailQuery в параметрах, чтобы получать только отфильтрованные сообщения.

В следующем фрагменте кода показано, как подключиться к почтовому ящику IMAP и получать сообщения со строкой «Newsletter» в теме и отправленные сегодня.

Отфильтровать сообщения по сегодняшней дате

В следующем фрагменте кода показано, как фильтровать все электронные письма на основе сегодняшней даты.

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

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

Фильтрация сообщений по определенному отправителю

В следующем фрагменте кода показано, как фильтровать все электронные письма на основе конкретного отправителя.

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

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

Фильтрация сообщений по определенному получателю

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

Фильтровать сообщения по MessageID

В следующем фрагменте кода показано, как фильтровать все электронные письма на основе MessageID.

Фильтрация сообщений по всем уведомлениям о доставке почты

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

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

Создание сложных запросов

Если отличается MailQueryBuilder свойства задаются в отдельном выражении, все условия соблюдены. Например, чтобы получить сообщение в определенном диапазоне дат и от определенного хоста, напишите три выражения:

Объединение запросов с AND

В следующем фрагменте кода показано, как комбинировать запросы с AND.

Объединение запросов с OR

MailQueryBuilder обеспечивает Or() метод, который требует двух MailQuery экземпляры в качестве параметров. Он получает сообщения, соответствующие любому из двух указанных условий. В приведенном ниже примере отфильтровываются сообщения, в теме которых указано слово «test» или «noreply@host.com» в качестве отправителя. В следующем фрагменте кода показано, как комбинировать запросы с OR.

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

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

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

Сортировка отфильтрованных сообщений в порядке возрастания/убывания

Фильтрация электронной почты может поддерживаться сортировкой сообщений в порядке возрастания/убывания. В этом случае OrderBy метод используется для указания порядка сортировки результатов поиска по электронной почте с помощью класса MailQueryBuilder. Этот метод позволяет определить критерии сортировки поискового запроса, указав, следует ли сортировать результаты в порядке возрастания или убывания в зависимости от определенного свойства.

Метод принимает параметр по возрастанию, который определяет порядок сортировки указанного свойства. Если параметр по возрастанию имеет значение true, это означает, что результаты поиска должны быть отсортированы в порядке возрастания. И наоборот, если параметр по возрастанию равен false, это означает, что результаты поиска следует отсортировать в порядке убывания.

MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Report");
builder.InternalDate.Since(new DateTime(2020, 1, 1));
builder.Subject.OrderBy(true); // sort the subject ascending
builder.InternalDate.OrderBy(false); // sort the date descending

MailQuery query = builder.GetQuery();

// Get list of messages
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);

В приведенном выше фрагменте кода метод orderBy применяется дважды: один раз для темы и один раз для даты письма. В результате выполнения метода listMessages с переданным запросом мы получим список сообщений с темой, содержащей слово «Отчет», которые были получены в указанную дату или позже. При этом результаты будут отсортированы по темам в порядке возрастания. Это означает, что сообщения будут отсортированы в алфавитном порядке от А до Я в зависимости от их темы. Кроме того, результаты будут отсортированы по дате в порядке убывания. Это означает, что сообщения будут отсортированы от новых к самым старым.