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

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

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

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

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

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

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

По сегодняшней дате

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

По диапазону дат

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

По отправителю

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

По домену

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

По получателю

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

По MessageID

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

По уведомлениям о доставке почты

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

По размеру сообщения

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

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

Комбинирование запросов с 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); // 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 с переданным запросом мы получим список сообщений, тема которых содержит слово "Report" и которые были получены в указанную дату или позже. При этом результаты будут отсортированы по теме в порядке возрастания — от A до Z в зависимости от темы. Также результаты будут отсортированы по дате в порядке убывания, то есть от новых к старым.

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

С помощью Aspose.Email for .NET пользователи могут воспользоваться мощными возможностями Advanced Query Syntax (AQS) для фильтрации сообщений непосредственно из почтового ящика Exchange. AQS предоставляет надёжный и интуитивный способ построения запросов, позволяющих точно отбирать письма по таким критериям, как дата, отправитель и тема. Для более подробного ознакомления с интеграцией AQS в процессы фильтрации почты и с образцами кода по реализации фильтрации сообщений с использованием AQS в Aspose.Email for .NET, пожалуйста, обратитесь к Фильтрация сообщений с помощью AQS из почтового ящика Exchange статья.