Фильтрация сообщений из почтового ящика Exchange
Фильтрация сообщений
Чтобы получить отфильтрованные сообщения из почтового ящика:
- Подключитесь к серверу Exchange.
- Создайте экземпляр MailQuery и установите желаемые свойства.
- Вызовите метод IEWSClient->ListMessages и передайте MailQuery в параметры, чтобы получить только отфильтрованные сообщения.
Следующий кодовый фрагмент показывает, как получить сообщения, у которых в теме есть строка “Newsletter” и которые были отправлены сегодня.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
try | |
{ | |
// Connect to EWS | |
const System::String mailboxUri = u"https://outlook.office365.com/ews/exchange.asmx"; | |
const System::String username = u"username"; | |
const System::String password = u"password"; | |
const System::String domain = u"domain"; | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Query building by means of ExchangeQueryBuilder class | |
System::SharedPtr<ExchangeQueryBuilder> builder = System::MakeObject<ExchangeQueryBuilder>(); | |
// Set Subject and Emails that arrived today | |
builder->get_Subject()->Contains(u"Newsletter"); | |
builder->get_InternalDate()->On(System::DateTime::get_Now()); | |
System::SharedPtr<MailQuery> query = builder->GetQuery(); | |
// Get list of messages | |
System::SharedPtr<ExchangeMessageInfoCollection> messages = client->ListMessages(client->get_MailboxInfo()->get_InboxUri(), query, false); | |
System::Console::WriteLine(System::String(u"EWS: ") + messages->get_Count() + u" message(s) found."); | |
// Disconnect from EWS | |
client->Dispose(); | |
} | |
catch (System::Exception& ex) | |
{ | |
System::Console::WriteLine(ex.get_Message()); | |
} |
Фильтрация сообщений по критериям
В приведенных выше примерах кода сообщения фильтруются на основе темы электронной почты и даты. Мы также можем фильтровать и по другим свойствам. Ниже приведены некоторые примеры установки условий с использованием MailQuery.
Критерии фильтрации по сегодняшней дате
Следующий кодовый фрагмент показывает, как фильтровать электронные письма на основе сегодняшней даты.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Emails that arrived today | |
System::SharedPtr<MailQueryBuilder> builder = System::MakeObject<MailQueryBuilder>(); | |
builder->get_InternalDate()->On(System::DateTime::get_Now()); |
Критерии фильтрации диапазона дат
Следующий кодовый фрагмент показывает, как фильтровать электронные письма на основе диапазона дат.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Emails that arrived in last 7 days | |
builder->get_InternalDate()->Before(System::DateTime::get_Now()); | |
builder->get_InternalDate()->Since(System::DateTime::get_Now().AddDays(-7)); |
Критерии фильтрации по конкретному отправителю
Следующий кодовый фрагмент показывает, как фильтровать электронные письма на основе конкретного отправителя.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Get emails from specific sender | |
builder->get_From()->Contains(u"saqib.razzaq@127.0.0.1"); |
Критерии фильтрации по конкретному домену
Следующий кодовый фрагмент показывает, как фильтровать электронные письма на основе конкретного домена.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Get emails from specific domain | |
builder->get_From()->Contains(u"SpecificHost.com"); |
Критерии фильтрации по конкретному получателю
Следующий кодовый фрагмент показывает, как фильтровать электронные письма на основе конкретного получателя.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Get emails sent to specific recipient | |
builder->get_To()->Contains(u"recipient"); |
Критерии фильтрации по MessageID
Следующий кодовый фрагмент показывает, как фильтровать электронные письма на основе MessageID.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Get email with specific MessageId | |
System::SharedPtr<ExchangeQueryBuilder> builder1 = System::MakeObject<ExchangeQueryBuilder>(); | |
builder1->get_MessageId()->Equals(u"MessageID"); |
Критерии фильтрации всех уведомлений о доставке почты
Следующий кодовый фрагмент показывает, как фильтровать электронные письма на основе всех уведомлений о доставке почты.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Get Mail Delivery Notifications | |
builder1 = System::MakeObject<ExchangeQueryBuilder>(); | |
builder1->get_ContentClass()->Equals(System::ObjectExt::ToString(ContentClassType::get_MDN())); |
Фильтрация по размеру сообщения
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
builder1 = System::MakeObject<ExchangeQueryBuilder>(); | |
builder1->get_ItemSize()->Greater(80000); |
Построение сложных запросов
Если разные свойства MailQueryBuilder установлены в отдельном выражении, все условия будут выполнены. Например, чтобы получить сообщение в определенном диапазоне дат и от конкретного хоста, напишите три выражения:
Комбинирование запросов с AND
Следующий кодовый фрагмент показывает, как комбинировать запросы с AND.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago | |
builder->get_From()->Contains(u"SpecificHost.com"); | |
builder->get_InternalDate()->Before(System::DateTime::get_Now()); | |
builder->get_InternalDate()->Since(System::DateTime::get_Now().AddDays(-7)); |
Комбинирование запросов с OR
MailQueryBuilder предоставляет метод Or(), который принимает два экземпляра MailQuery в качестве параметров. Он получает сообщения, которые соответствуют любому из двух указанных условий. В следующем примере фильтруются сообщения, которые имеют слово “test” в теме или “noreply@host.com” в качестве отправителя. Следующий кодовый фрагмент показывает, как комбинировать запросы с OR.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
builder->Or(builder->get_Subject()->Contains(u"test"), builder->get_From()->Contains(u"noreply@host.com")); |
Фильтрация электронной почты с учетом регистра
Электронные письма можно фильтровать с учетом регистра, указав флаг IgnoreCase в условиях фильтрации, как показано в следующем кодовом фрагменте.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Query building by means of ExchangeQueryBuilder class | |
System::SharedPtr<ExchangeQueryBuilder> builder = System::MakeObject<ExchangeQueryBuilder>(); | |
builder->get_Subject()->Contains(u"Newsletter", true); | |
builder->get_InternalDate()->On(System::DateTime::get_Now()); | |
System::SharedPtr<MailQuery> query = builder->GetQuery(); | |
// Get list of messages | |
System::SharedPtr<ExchangeMessageInfoCollection> messages = client->ListMessages(client->get_MailboxInfo()->get_InboxUri(), query, false); | |
System::Console::WriteLine(System::String(u"EWS: ") + messages->get_Count() + u" message(s) found."); | |
// Disconnect from EWS | |
client->Dispose(); |
Фильтрация сообщений с поддержкой разделения на страницы
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
int32_t itemsPerPage = 5; | |
System::String sGuid = System::ObjectExt::ToString(System::Guid::NewGuid()); | |
System::String str1 = sGuid + u" - " + u"Query 1"; | |
System::String str2 = sGuid + u" - " + u"Query 2"; | |
System::SharedPtr<MailQueryBuilder> queryBuilder1 = System::MakeObject<MailQueryBuilder>(); | |
queryBuilder1->get_Subject()->Contains(str1); | |
System::SharedPtr<MailQuery> query1 = queryBuilder1->GetQuery(); | |
System::SharedPtr<System::Collections::Generic::List<System::SharedPtr<ExchangeMessagePageInfo>>> pages = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<ExchangeMessagePageInfo>>>(); | |
System::SharedPtr<ExchangeMessagePageInfo> pageInfo = client->ListMessagesByPage(client->get_MailboxInfo()->get_InboxUri(), query1, itemsPerPage); | |
pages->Add(pageInfo); | |
int32_t str1Count = pageInfo->get_Items()->get_Count(); | |
while (!pageInfo->get_LastPage()) | |
{ | |
pageInfo = client->ListMessagesByPage(client->get_MailboxInfo()->get_InboxUri(), query1, itemsPerPage, pageInfo->get_PageOffset() + 1); | |
pages->Add(pageInfo); | |
str1Count += pageInfo->get_Items()->get_Count(); | |
} |