Фильтрация сообщений из почтового ящика Exchange с использованием WebDav
Фильтрация сообщений с использованием WebDav
Класс ExchangeClient предоставляет метод ListMessages(), который получает все сообщения из почтового ящика. Чтобы получить только сообщения, соответствующие некоторым условиям, используйте перегруженный метод ListMessages(), который принимает класс MailQuery в качестве аргумента. Класс MailQuery предоставляет различные свойства для указания условий, например, дата, тема, отправитель и получатель. Кроме того, API также позволяет применять фильтры с учетом регистра для извлечения электронных писем из почтового ящика.
Фильтрация сообщений
Чтобы получить отфильтрованные сообщения из почтового ящика:
- Подключитесь к серверу Exchange.
- Создайте экземпляр MailQuery и установите необходимые свойства.
- Вызовите метод 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(); |