Filtrar Mensajes Desde el Buzón de Exchange

Filtrando Mensajes utilizando EWS

La IEWSClient interface proporciona el ListMessages() método 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. Además, la API también permite aplicar filtros de case-sensitivity para recuperar correos electrónicos del buzón.

Filtrar Mensajes por Criterio

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 muestra cómo conectarse a un buzón IMAP y obtener los 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 EWS
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
const string username = "username";
const string password = "password";
const string domain = "domain";
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, username, password, domain);
// 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("EWS: " + messages.Count + " message(s) found.");
// Disconnect from EWS
client.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

Filtrar Mensajes por la Fecha de Hoy

El siguiente fragmento de código 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);

Filtrar Mensajes por Rango de Fechas

El siguiente fragmento de código 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));

Filtrar Mensajes por Remitente Específico

El siguiente fragmento de código 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");

Filtrar Mensajes por Dominio Específico

El siguiente fragmento de código 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");

Filtrar Mensajes por Destinatario Específico

El siguiente fragmento de código 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");

Filtrar Mensajes por MessageID

El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en función del 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");

Filtrar Mensajes por Todas las Notificaciones de Entrega de Correo

El siguiente fragmento de código 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());

Filtrar Mensajes por Tamaño de Mensaje

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
builder1 = new ExchangeQueryBuilder();
builder1.ItemSize.Greater(80000);

Construyendo Consultas Complejas

Si diferentes MailQueryBuilder propiedades 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 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

MailQueryBuilder proporciona el método Or() que toma dos instancias de MailQuery como parámetros. Obtiene mensajes que coinciden con alguna 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 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
builder.Or(builder.Subject.Contains("test"), builder.From.Contains("noreply@host.com"));

Filtrado de Correos Electrónicos Sensible 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 filtro 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
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.Subject.Contains("Newsletter", true);
builder.InternalDate.On(DateTime.Now);
MailQuery query = builder.GetQuery();

Filtrando Mensajes con Soporte de Paginación

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
int itemsPerPage = 5;
string sGuid = Guid.NewGuid().ToString();
string str1 = sGuid + " - " + "Query 1";
string str2 = sGuid + " - " + "Query 2";
MailQueryBuilder queryBuilder1 = new MailQueryBuilder();
queryBuilder1.Subject.Contains(str1);
MailQuery query1 = queryBuilder1.GetQuery();
List<ExchangeMessagePageInfo> pages = new List<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.ListMessagesByPage(client.MailboxInfo.InboxUri, query1, itemsPerPage);
pages.Add(pageInfo);
int str1Count = pageInfo.Items.Count;
while (!pageInfo.LastPage)
{
pageInfo = client.ListMessagesByPage(client.MailboxInfo.InboxUri, query1, itemsPerPage, pageInfo.PageOffset + 1);
pages.Add(pageInfo);
str1Count += pageInfo.Items.Count;
}

Ordenando mensajes filtrados en orden ascendente/descendente

El filtrado de correos electrónicos puede estar soportado con la clasificación de mensajes en orden ascendente/descendente. En este caso, el método OrderBy se utiliza para especificar el orden en que se ordenan los resultados de una búsqueda de correos electrónicos utilizando la clase MailQueryBuilder. Este método te permite definir criterios de ordenación para una consulta de búsqueda, especificando si los resultados deben clasificarse en orden ascendente o descendente según una propiedad particular.

El método acepta el parámetro ascendente, que especifica el orden de clasificación para la propiedad especificada. Si el parámetro ascendente es verdadero, significa que los resultados de la búsqueda deben ordenarse en orden ascendente. Por el contrario, si el parámetro ascendente es falso, significa que los resultados de la búsqueda deben ordenarse en orden descendente.

MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Report");
builder.InternalDate.Since(new DateTime(2020, 1, 1));
builder.Subject.OrderBy(true); // ordenar el asunto de manera ascendente
builder.InternalDate.OrderBy(false); // ordenar la fecha de manera descendente

MailQuery query = builder.GetQuery();

// Obtener lista de mensajes
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);

En el fragmento de código anterior, el método OrderBy se aplica dos veces, una para el asunto y otra para la fecha de los correos electrónicos. Como resultado de ejecutar el método ListMessages con la solicitud pasada, obtendremos una lista de mensajes con el asunto que contiene la palabra “Report” que fueron recibidos en la fecha especificada o después. Al mismo tiempo, los resultados estarán ordenados por asunto en orden ascendente. Esto significa que los mensajes se ordenarán alfabéticamente de A a Z, dependiendo de su asunto. Además, los resultados se ordenarán por fecha en orden descendente. Esto significa que las publicaciones se ordenarán de las más recientes a las más antiguas.