Filtrar y ordenar mensajes en el buzón del servidor Exchange usando EWS
Filtrar y ordenar mensajes usando EWS
El IEWSClient interfaz proporciona el ListMessages() método que obtiene todos los mensajes de un buzón. Para obtener solo los mensajes que coincidan con alguna condición, use la sobrecarga ListMessages() método que toma el MailQuery clase como argumento. El MailQuery la clase proporciona diversas propiedades para especificar condiciones, por ejemplo, fecha, asunto, remitente y destinatario. Además, la API también permite aplicar filtros de distinción entre mayúsculas y minúsculas para recuperar correos electrónicos del buzón.
Filtrar mensajes por criterios
Para obtener mensajes filtrados de un buzón:
- Conéctese al servidor Exchange.
- Cree una instancia de MailQuery y establecer las propiedades deseadas.
- Llame al IEWSClient.ListMessages() método y pasar el MailQuery en los parámetros para obtener solo los mensajes filtrados.
El siguiente fragmento de código le muestra cómo conectarse a un buzón IMAP y obtener mensajes que tengan la cadena "Newsletter" en el asunto y que fueron enviados hoy.
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);
}
Por la fecha de hoy
El siguiente fragmento de código le muestra cómo filtrar todos los correos electrónicos en función de la fecha de hoy.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.InternalDate.On(DateTime.Now);
Por rango de fechas
El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base al rango de fechas.
// Emails that arrived in last 7 days
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));
Por remitente
El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a un remitente específico.
// Get emails from specific sender
builder.From.Contains("saqib.razzaq@127.0.0.1");
Por dominio
El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a un dominio específico.
// Get emails from specific domain
builder.From.Contains("SpecificHost.com");
Por destinatario
El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a un destinatario específico.
// Get emails sent to specific recipient
builder.To.Contains("recipient");
Por ID de mensaje
El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base al MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.MessageId.Equals("MessageID");
Por notificaciones de entrega de correo
El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a todas las notificaciones de entrega de correo.
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.ContentClass.Equals(ContentClassType.MDN.ToString());
Por tamaño de mensaje
builder1 = new ExchangeQueryBuilder();
builder1.ItemSize.Greater(80000);
Construir consultas complejas
Si diferentes MailQueryBuilder las propiedades se establecen en una sentencia separada, todas las condiciones se cumplen. Por ejemplo, para obtener un mensaje en un rango de fechas específico y de un host concreto, escriba tres sentencias:
Combinar consultas con AND
El siguiente fragmento de código muestra cómo combinar consultas con AND.
// 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));
Combinar consultas con OR
MailQueryBuilder proporciona el Or() método que toma dos MailQuery instancias 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 muestra cómo combinar consultas con OR.
builder.Or(builder.Subject.Contains("test"), builder.From.Contains("noreply@host.com"));
Filtrado de correo electrónico sensible a mayúsculas
Los correos electrónicos pueden filtrarse según la sensibilidad a mayúsculas especificando la bandera IgnoreCase en los criterios de filtro, como se muestra en el siguiente fragmento de código.
// 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();
Filtrar mensajes con soporte de paginación
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;
}
Ordenar mensajes filtrados en orden ascendente/descendente
El filtrado de correo puede soportarse con ordenación de mensajes en orden ascendente/descendente. En este caso, OrderBy el método se usa para especificar el orden en que se ordenan los resultados de una búsqueda de correo usando la clase MailQueryBuilder. Este método le permite definir criterios de clasificación para una consulta de búsqueda, especificando si los resultados deben ordenarse en forma ascendente o descendente según una propiedad particular.
El método acepta el parámetro ascending, que especifica el orden de clasificación para la propiedad indicada. Si el parámetro ascending es true, significa que los resultados de búsqueda deben ordenarse en orden ascendente. Por el contrario, si el parámetro ascending es false, significa que los resultados 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); // sort the subject ascending
builder.InternalDate.OrderBy(false); // sort the date descending
MailQuery query = builder.GetQuery();
// Get list of messages
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. 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 se ordenarán por asunto en orden ascendente. Esto significa que los mensajes se ordenarán alfabéticamente de la A a la Z, según su asunto. Además, los resultados se ordenarán por fecha en orden descendente. Esto significa que los mensajes se ordenarán de más nuevo a más antiguo.
Filtrar mensajes usando AQS
Con Aspose.Email para .NET, los usuarios pueden aprovechar las potentes capacidades del Lenguaje de Consulta Avanzada (AQS) para filtrar mensajes directamente de un buzón Exchange. AQS ofrece un método robusto e intuitivo para construir consultas que pueden dirigirse con precisión a correos electrónicos basados en criterios específicos como fecha, remitente y asunto. Para obtener más información detallada sobre su integración en sus procesos de filtrado de correo y ejemplos de código completos sobre cómo implementar el filtrado de mensajes usando AQS con Aspose.Email para .NET, consulte el Filtrar mensajes con AQS desde buzón Exchange artículo.