Filtrar mensajes de la bandeja de entrada de Exchange usando WebDav
Filtrando mensajes usando WebDav
La clase ExchangeClient proporciona el método ListMessages() que obtiene todos los mensajes de una bandeja de entrada. Para obtener solo los mensajes que coincidan 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. Además, la API también permite aplicar filtros de sensibilidad a mayúsculas y minúsculas para recuperar correos electrónicos de la bandeja de entrada.
Filtrando mensajes
Para obtener mensajes filtrados de una bandeja de entrada:
- Conéctate al servidor de Exchange.
- Crea una instancia de MailQuery y configura las propiedades deseadas.
- Llama al método ExchangeClient.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 conectarte a una bandeja de entrada IMAP y obtener mensajes que contienen la cadena “Newsletter” en el asunto y fueron enviados hoy.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
try | |
{ | |
// Connect to Exchange Server | |
const string mailboxUri = "http://exchange-server/Exchange/username"; | |
const string username = "username"; | |
const string password = "password"; | |
const string domain = "domain.com"; | |
NetworkCredential credential = new NetworkCredential(username, password, domain); | |
ExchangeClient client = new ExchangeClient(mailboxUri, credential); | |
// Query building by means of ExchangeQueryBuilder class | |
ExchangeQueryBuilder builder = new ExchangeQueryBuilder(); | |
// Set Subject and Emails that arrived today | |
builder.Subject.Contains("Newsletter"); | |
builder.InternalDate.On(DateTime.Now); | |
MailQuery query = builder.GetQuery(); | |
// Get list of messages | |
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false); | |
Console.WriteLine("Exchange: " + messages.Count + " message(s) found."); | |
// Disconnect from Exchange | |
client.Dispose(); | |
} | |
catch (Exception ex) | |
{ | |
Console.WriteLine(ex.Message); | |
} |
Filtrar mensajes por criterio
Los ejemplos de código anteriores filtran mensajes en función del asunto del correo electrónico y la fecha. También podemos filtrar por otras propiedades. A continuación se presentan algunos ejemplos de establecimiento de condiciones utilizando MailQuery.
Criterio de filtrado Fecha de hoy
El siguiente fragmento de código te muestra cómo filtrar todos los correos electrónicos en función de la fecha de hoy.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Emails that arrived today | |
MailQueryBuilder builder = new MailQueryBuilder(); | |
builder.InternalDate.On(DateTime.Now); |
Criterio de filtrado Rango de fechas
El siguiente fragmento de código te muestra cómo filtrar todos los correos electrónicos en función del rango de fechas.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Emails that arrived in last 7 days | |
builder.InternalDate.Before(DateTime.Now); | |
builder.InternalDate.Since(DateTime.Now.AddDays(-7)); |
Criterio de filtrado Remitente específico
El siguiente fragmento de código te muestra cómo filtrar todos los correos electrónicos en función de un remitente específico.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Get emails from specific sender | |
builder.From.Contains("saqib.razzaq@127.0.0.1"); |
Criterio de filtrado Dominio específico
El siguiente fragmento de código te muestra cómo filtrar todos los correos electrónicos en función de un dominio específico.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Get emails from specific domain | |
builder.From.Contains("SpecificHost.com"); |
Criterio de filtrado Destinatario específico
El siguiente fragmento de código te muestra cómo filtrar todos los correos electrónicos en función de un destinatario específico.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Get emails sent to specific recipient | |
builder.To.Contains("recipient"); |
Criterio de filtrado Por MessageID
El siguiente fragmento de código te muestra cómo filtrar todos los correos electrónicos en función de MessageID.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Get email with specific MessageId | |
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder(); | |
builder1.MessageId.Equals("MessageID"); |
Criterio de filtrado Todas las notificaciones de entrega de correo
El siguiente fragmento de código te muestra cómo filtrar todos los correos electrónicos en función de todas las notificaciones de entrega de correo.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Get Mail Delivery Notifications | |
builder1 = new ExchangeQueryBuilder(); | |
builder1.ContentClass.Equals(ContentClassType.MDN.ToString()); |
Construyendo consultas complejas
Si diferentes propiedades de ExchangeQueryBuilder se establecen 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-.NET | |
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago | |
builder.From.Contains("SpecificHost.com"); | |
builder.InternalDate.Before(DateTime.Now); | |
builder.InternalDate.Since(DateTime.Now.AddDays(-7)); |
Combinando consultas con OR
ExchangeQueryBuilder 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 ejemplo a continuación 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-.NET | |
// Specify OR condition | |
builder.Or(builder.Subject.Contains("test"), builder.From.Contains("noreply@host.com")); |
Filtrado de correos electrónicos con sensibilidad a mayúsculas y minúsculas
Los correos electrónicos se pueden filtrar en función de la sensibilidad a mayúsculas y minúsculas especificando 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-.NET | |
// Set conditions | |
ExchangeQueryBuilder builder = new ExchangeQueryBuilder(); | |
builder.Subject.Contains("Newsletter", true); | |
builder.InternalDate.On(DateTime.Now); | |
MailQuery query = builder.GetQuery(); |