Filtrar mensajes del buzón Exchange
Filtrado de mensajes usando EWS
El IEWSClient class 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.
Filtrado de mensajes
Para obtener mensajes filtrados de un buzón:
- Conéctese al servidor Exchange.
- Cree una instancia de MailQuery y establezca las propiedades deseadas.
- Llame al método IEWSClient.listMessages() y pase 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
final String mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
final String username = "username";
final String password = "password";
final 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.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();
// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("EWS: " + messages.size() + " message(s) found.");
// Disconnect from EWS
client.dispose();
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
Filtrar mensajes por criterios
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.
Filtrar mensajes 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.getInternalDate().on(new Date());
Filtrar mensajes 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
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());
Filtrar mensajes por 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.
// Get emails from specific sender
builder.getFrom().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 base a un dominio específico.
// Get emails from specific domain
builder.getFrom().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 base a un destinatario específico.
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Filtrar mensajes 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 builder = new ExchangeQueryBuilder();
builder.getMessageId().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 base a todas las notificaciones de entrega de correo.
// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
Filtrar mensajes por tamaño
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
Filtrar mensajes por valor de cadena
El siguiente fragmento de código le muestra cómo filtrar todos los correos electrónicos en función de la cadena especificada en los encabezados (asunto, de, para, cc). El getText() el método devuelve el valor de cadena junto con el cuerpo del mensaje.
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
Filtrar mensajes en orden ascendente/descendente
Aspose.Email proporciona el ComparisonField.orderBy(boolean ascending) método que establece el valor que indica que el cliente usa ordenación ascendente o descendente en el campo de búsqueda. Permite ordenar los mensajes de correo en orden ascendente/descendente según los criterios especificados por MailQueryBuilder.
El siguiente fragmento de código demuestra cómo filtrar mensajes en orden ascendente/descendente:
MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Report");
builder.getInternalDate().since(sinceDate);
builder.getSubject().orderBy(true); // sort the subject ascending
builder.getInternalDate().orderBy(false); // sort the date descending
ExchangeMessageInfoCollection miColl = client.listMessages(client.getMailboxInfo().getInboxUri(), builder.getQuery());
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.getFrom().contains("SpecificHost.com");
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());
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 tengan 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.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 fragmento de código.
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getSubject().contains("Newsletter", true);
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();
Filtrado de mensajes con soporte de paginación
int itemsPerPage = 5;
String sGuid = UUID.randomUUID().toString();
String str1 = sGuid + " - " + "Query 1";
String str2 = sGuid + " - " + "Query 2";
MailQueryBuilder queryBuilder1 = new MailQueryBuilder();
queryBuilder1.getSubject().contains(str1);
MailQuery query1 = queryBuilder1.getQuery();
List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage);
pages.add(pageInfo);
int str1Count = pageInfo.getItems().size();
while (!pageInfo.getLastPage()) {
pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage, pageInfo.getPageOffset() + 1);
pages.add(pageInfo);
str1Count += pageInfo.getItems().size();
}