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

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

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

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

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

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

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
try
{
// Connect to Exchange Server
const string mailboxUri = "http://exchange-server/Exchange/username";
const string username = "username";
const string password = "password";
const string domain = "domain.com";
NetworkCredential credential = new NetworkCredential(username, password, domain);
ExchangeClient client = new ExchangeClient(mailboxUri, credential);
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Set Subject and Emails that arrived today
builder.Subject.Contains("Newsletter");
builder.InternalDate.On(DateTime.Now);
MailQuery query = builder.GetQuery();
// Get list of messages
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);
Console.WriteLine("Exchange: " + messages.Count + " message(s) found.");
// Disconnect from Exchange
client.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

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

Примеры кода выше фильтруют сообщения на основе темы электронной почты и даты. Мы также можем фильтровать по другим свойствам. Ниже приведены примеры настройки условий с использованием MailQuery.

Фильтрация по критерию сегодняшней даты

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.InternalDate.On(DateTime.Now);

Фильтрация по критерию диапазона дат

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Emails that arrived in last 7 days
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));

Фильтрация по критерию конкретного отправителя

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get emails from specific sender
builder.From.Contains("saqib.razzaq@127.0.0.1");

Фильтрация по критерию конкретного домена

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get emails from specific domain
builder.From.Contains("SpecificHost.com");

Фильтрация по критерию конкретного получателя

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get emails sent to specific recipient
builder.To.Contains("recipient");

Фильтрация по критерию по MessageID

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.MessageId.Equals("MessageID");

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

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.ContentClass.Equals(ContentClassType.MDN.ToString());

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

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

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

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.From.Contains("SpecificHost.com");
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));

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

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Specify OR condition
builder.Or(builder.Subject.Contains("test"), builder.From.Contains("noreply@host.com"));

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

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set conditions
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.Subject.Contains("Newsletter", true);
builder.InternalDate.On(DateTime.Now);
MailQuery query = builder.GetQuery();