Filtrar Mensagens da Caixa de Correio do Exchange

A classe IEWSClient fornece o método ListMessages() que obtém todas as mensagens de uma caixa de correio. Para obter apenas mensagens que correspondam a alguma condição, use o método sobrecarregado ListMessages() que recebe a classe MailQuery como argumento. A classe MailQuery fornece várias propriedades para especificar condições, por exemplo, data, assunto, remetente e destinatário.

Filtrando Mensagens

Para obter mensagens filtradas de uma caixa de correio:

  1. Conecte-se ao servidor Exchange.
  2. Crie uma instância de MailQuery e defina as propriedades desejadas.
  3. Chame o método IEWSClient->ListMessages e passe o MailQuery nos parâmetros para obter apenas as mensagens filtradas.

O seguinte trecho de código mostra como obter mensagens que têm a string “Newsletter” no assunto e foram enviadas hoje.

// 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());
}

Filtrar Mensagens com Base em Critérios

Os exemplos de código acima filtram mensagens com base no assunto do email e data. Também podemos filtrar por outras propriedades. Abaixo estão alguns exemplos de como definir as condições usando MailQuery.

Critério de Filtragem Data de Hoje

O seguinte trecho de código mostra como filtrar emails com base na data de hoje.

// 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());

Critério de Filtragem Intervalo de Datas

O seguinte trecho de código mostra como filtrar emails com base em um intervalo de datas.

// 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));

Critério de Filtragem Remetente Específico

O seguinte trecho de código mostra como filtrar emails com base em um remetente específico.

// 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");

Critério de Filtragem Domínio Específico

O seguinte trecho de código mostra como filtrar emails com base em um domínio específico.

// 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");

Critério de Filtragem Destinatário Específico

O seguinte trecho de código mostra como filtrar emails com base em um destinatário específico.

// 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");

Critério de Filtragem por MessageID

O seguinte trecho de código mostra como filtrar emails com base em 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");

Critério de Filtragem Todas as Notificações de Entrega de Email

O seguinte trecho de código mostra como filtrar emails com base em todas as notificações de entrega de email.

// 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()));

Filtrar por Tamanho da Mensagem

// 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);

Construindo Consultas Complexas

Se diferentes propriedades do MailQueryBuilder forem definidas em uma instrução separada, todas as condições são correspondidas. Por exemplo, para obter uma mensagem em um intervalo de datas particular e de um host específico, escreva três instruções:

Combinando Consultas com E

O seguinte trecho de código mostra como combinar consultas com E.

// 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));

Combinando Consultas com OU

O MailQueryBuilder fornece o método Or() que aceita duas instâncias de MailQuery como parâmetros. Ele obtém mensagens que correspondem a qualquer uma das duas condições especificadas. O exemplo abaixo filtra mensagens que têm a palavra “test” no assunto ou “noreply@host.com” como remetente. O seguinte trecho de código mostra como combinar consultas com OU.

// 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"));

Filtragem de Emails Sensível a Maiúsculas e Minúsculas

Os emails podem ser filtrados com base na sensibilidade a maiúsculas e minúsculas especificando a flag IgnoreCase nos critérios de filtragem, como mostrado no seguinte trecho de código.

// 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();

Filtrando Mensagens com Suporte de Paginação

// 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();
}