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:

  1. Conéctate al servidor de Exchange.
  2. Crea una instancia de MailQuery y configura las propiedades deseadas.
  3. 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();