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

Расширенный синтаксис запросов (AQS) — это синтаксис запросов, используемый Exchange в качестве альтернативы поисковым фильтрам для выражения критериев поиска. AQS является более гибким способом выполнения поисков и предоставления результатов поиска для всех общепринятых полей элементов. AQS также удобен для пользователя, легко воспринимается и быстро осваивается. Использование AQS подходит для поиска сообщений по вложениям и получателям.

Создание запроса поиска с помощью AQS

Вы можете создать запрос поиска с помощью AQS следующим образом:

  • ExchangeAdvancedSyntaxQueryBuilder, который представляет собой строитель поискового выражения, основанный на Расширенном синтаксисе запросов (AQS). Или
  • ExchangeAdvancedSyntaxMailQuery, который создает строку AQS непосредственно на основе поддерживаемых ключевых слов.

Создание запроса поиска с использованием конструктора запросов

Чтобы создать запрос поиска с помощью ExchangeAdvancedSyntaxQueryBuilder вам необходимо:

  • создать экземпляр IEWSClient с использованием метода GetEWSClient

  • создать экземпляр ExchangeAdvancedSyntaxQueryBuilder и установить необходимые свойства для построения запроса.

  • вызвать метод ListMessages или ListItems и передать экземпляр MailQuery, возвращаемый методом GetQuery, в качестве одного из его параметров.

Пример кода ниже показывает, как можно осуществить вышеперечисленные шаги:

using (var client = EWSClient.GetEWSClient(...))
{
    var advancedBuilder = new ExchangeAdvancedSyntaxQueryBuilder();
    advancedBuilder.From.Equals("Jim Martin");
    advancedBuilder.Subject.Contains("report");
    advancedBuilder.HasAttachment.Equals(true);

    var messages = client.ListMessages(client.MailboxInfo.InboxUri, advancedBuilder.GetQuery());
}

Создание запроса поиска непосредственно с использованием AQS:

Чтобы создать запрос поиска с помощью ExchangeAdvancedSyntaxMailQuery вам необходимо:

Пример кода ниже показывает, как можно осуществить вышеперечисленные шаги:

using (var client = EWSClient.GetEWSClient(...))
{
    ExchangeAdvancedSyntaxMailQuery query = new ExchangeAdvancedSyntaxMailQuery("subject:(product AND report)");
    ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query);
}