Filtrar Mensajes Desde el Buzón de Exchange

La clase IEWSClient proporciona el método ListMessages() que obtiene todos los mensajes de un buzón. Para obtener solo los mensajes que coinciden con alguna condición, utiliza el método sobrecargado ListMessages() que toma la clase MailQuery como argumento. La clase MailQuery proporciona varias propiedades para especificar condiciones, por ejemplo, fecha, asunto, remitente y destinatario.

Filtrando Mensajes

Para obtener mensajes filtrados de un buzón:

  1. Conéctate al servidor de Exchange.
  2. Crea una instancia de MailQuery y establece las propiedades deseadas.
  3. Llama al método IEWSClient->ListMessages y pasa el MailQuery en los parámetros para obtener solo los mensajes filtrados.

El siguiente fragmento de código te muestra cómo obtener mensajes que contienen la cadena “Newsletter” en el asunto y que fueron enviados hoy.

// 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 Mensajes Basado en Criterios

Los ejemplos de código anteriores filtran mensajes basados en el asunto de correo y la fecha. También podemos filtrar en otras propiedades. A continuación se presentan algunos ejemplos de cómo establecer las condiciones utilizando MailQuery.

Criterios de Filtrado Fecha de Hoy

El siguiente fragmento de código te muestra cómo filtrar correos en base a la fecha de hoy.

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

Criterios de Filtrado Rango de Fechas

El siguiente fragmento de código te muestra cómo filtrar correos en base a un rango de fechas.

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

Criterios de Filtrado Remitente Específico

El siguiente fragmento de código te muestra cómo filtrar correos en base a un remitente 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");

Criterios de Filtrado Dominio Específico

El siguiente fragmento de código te muestra cómo filtrar correos en base a un dominio 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");

Criterios de Filtrado Destinatario Específico

El siguiente fragmento de código te muestra cómo filtrar correos en base a un destinatario 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");

Criterios de Filtrado Por MessageID

El siguiente fragmento de código te muestra cómo filtrar correos en base a 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");

Criterios de Filtrado Todas las Notificaciones de Entrega de Correo

El siguiente fragmento de código te muestra cómo filtrar correos en base a todas las notificaciones de entrega de correo.

// 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 Tamaño de Mensaje

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

Construyendo Consultas Complejas

Si se establecen diferentes propiedades de MailQueryBuilder en una declaración separada, se cumplen todas las condiciones. Por ejemplo, para obtener un mensaje en un rango de fechas particular y de un host específico, escribe tres declaraciones:

Combinando Consultas con AND

El siguiente fragmento de código te muestra cómo combinar consultas con 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));

Combinando Consultas con OR

MailQueryBuilder proporciona el método Or() que toma dos instancias de MailQuery como parámetros. Obtiene mensajes que coinciden con cualquiera de las dos condiciones especificadas. El siguiente ejemplo filtra mensajes que tienen la palabra “test” en el asunto o “noreply@host.com” como remitente. El siguiente fragmento de código te muestra cómo combinar consultas con 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"));

Filtrado de Correos Sensible a Mayúsculas y Minúsculas

Los correos se pueden filtrar en función de la sensibilidad a mayúsculas y minúsculas al especificar la bandera IgnoreCase en los criterios de filtrado, como se muestra en el siguiente fragmento 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 Mensajes con Soporte de Paginación

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