Filtrar Mensajes Desde el Buzón de Exchange
Filtrando Mensajes
Para obtener mensajes filtrados de un buzón:
- Conéctate al servidor de Exchange.
- Crea una instancia de MailQuery y establece las propiedades deseadas.
- 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(); | |
} |