Filtrar mensajes del buzón Exchange usando WebDav

Filtrar mensajes usando Web Dav

Para obtener mensajes filtrados de un buzón:

  1. Conéctese al servidor Exchange.
  2. Cree una instancia de MailQuery y establezca las propiedades deseadas.
  3. Llame al método ExchangeClient.listMessages(MailQuery query) y pase el MailQuery en los parámetros para obtener solo los mensajes filtrados.

Los ejemplos de código a continuación muestran cómo conectarse a un buzón Exchange y obtener mensajes que tengan la cadena "Newsletter" en el asunto y que fueron enviados hoy.

ExchangeClient client = new ExchangeClient("http://MachineName/exchange/Username", "username", "password", "domain");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");

// Emails that arrived today
try {
	builder.getInternalDate().on(sdf.parse("10/05/2016 10:00:00"));
} catch (ParseException e) {
	e.printStackTrace();
}

// Build the query
MailQuery query = builder.getQuery();

// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("Imap: " + messages.size() + " message(s) found.");

Obtener mensajes que cumplan criterios específicos

Los ejemplos de código anteriores filtran los mensajes según el asunto y la fecha del correo electrónico. También podemos filtrar por otras propiedades. A continuación se presentan algunos ejemplos de configuración de condiciones usando MailQuery.

Criterio de filtro: Fecha de hoy

El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a la fecha de hoy.

// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());

Criterio de filtro: Rango de fechas

El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base al rango de fechas.

MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));

Criterio de filtro: Remitente específico

El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a un remitente específico.

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");

Criterio de filtro: Dominio específico

El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a un dominio específico.

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");

Criterio de filtro: Destinatario específico

El siguiente fragmento de código muestra cómo filtrar todos los correos electrónicos en base a un destinatario específico.

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");

Criterio de filtro por MessageID

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.getMessageId().equals("MessageID");

Criterio de filtro: Todas las 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.getContentClass().equals(ContentClassType.getMDN().toString());

Construir consultas complejas

Si se establecen diferentes propiedades de QueryBuilder en declaraciones separadas, se cumplen todas las condiciones. Por ejemplo, para obtener un mensaje en un rango de fechas concreto y de un host específico, escriba tres declaraciones:

Combinar consultas con AND

MailQueryBuilder builder = new MailQueryBuilder();

// Emails from specific host
builder.getFrom().contains("SpecificHost.com");
// AND all emails that arrived before today
builder.getInternalDate().before(new Date());
// AND all emails that arrived since 7 days ago
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(-7)));

Combinar consultas con OR

QueryBuilder 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 o bien tienen la palabra "test" en el asunto o "noreply@host.com" como remitente.

MailQueryBuilder builder = new MailQueryBuilder();
		
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().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 ejemplo.

//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();