Фильтрация сообщений из почтового ящика 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(); | |
| } |