Filtrar Mensagens da Caixa de Correio Exchange
Filtrando Mensagens usando EWS
O IEWSClient classe fornece o listMessages() método que obtém todas as mensagens de uma caixa de correio. Para obter apenas mensagens que correspondam a alguma condição, use o sobrecarregado listMessages() método que recebe o MailQuery classe como argumento. O MailQuery a classe fornece várias propriedades para especificar condições, por exemplo, data, assunto, remetente e destinatário. Além disso, a API também permite aplicar filtros sensíveis a maiúsculas/minúsculas ao recuperar e‑mails da caixa de correio.
Filtrando Mensagens
Para obter mensagens filtradas de uma caixa de correio:
- Conectar ao servidor Exchange.
- Crie uma instância de MailQuery e defina as propriedades desejadas.
- Chame o método IEWSClient.listMessages() e passe o MailQuery nos parâmetros para obter apenas as mensagens filtradas.
O trecho de código a seguir mostra como conectar a uma caixa de correio IMAP e obter mensagens que têm a string "Newsletter" no assunto e foram enviadas hoje.
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 Mensagens por Critério
Os exemplos de código acima filtram mensagens com base no assunto e na data do e‑mail. Podemos filtrar também por outras propriedades. Abaixo estão alguns exemplos de definição das condições usando MailQuery.
Filtrar Mensagens pela Data de Hoje
O trecho de código a seguir mostra como filtrar todos os e‑mails com base na data de hoje.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Filtrar Mensagens por Intervalo de Datas
O trecho de código a seguir mostra como filtrar todos os e‑mails com base no intervalo de datas.
// 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 Mensagens por Remetente Específico
O trecho de código a seguir mostra como filtrar todos os e‑mails com base em um remetente específico.
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Filtrar Mensagens por Domínio Específico
O trecho de código a seguir mostra como filtrar todos os e‑mails com base em um domínio específico.
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Filtrar Mensagens por Destinatário Específico
O trecho de código a seguir mostra como filtrar todos os e‑mails com base em um destinatário específico.
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Filtrar Mensagens por MessageID
O trecho de código a seguir mostra como filtrar todos os e‑mails com base no MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");
Filtrar Mensagens por Todas as Notificações de Entrega de Email
O trecho de código a seguir mostra como filtrar todos os e‑mails com base em todas as notificações de entrega de correio.
// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
Filtrar Mensagens por Tamanho
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
Filtrar Mensagens por Valor de String
O trecho de código a seguir mostra como filtrar todos os e‑mails com base na string especificada nos cabeçalhos (assunto, de, para, cc). O getText() método retorna o valor da string junto com o corpo da mensagem.
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
Filtrar Mensagens em Ordem Ascendente/Descendente
Aspose.Email fornece o ComparisonField.orderBy(boolean ascending) método que define o valor indicando que o cliente usa classificação ascendente ou descendente no campo de pesquisa. Ele permite ordenar mensagens de email em ordem ascendente/descendente com base nos critérios especificados por MailQueryBuilder.
O trecho de código abaixo demonstra como filtrar mensagens em ordem 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());
Construindo consultas complexas
Se diferentes MailQueryBuilder as propriedades são definidas em uma instrução separada, todas as condições são atendidas. Por exemplo, para obter uma mensagem em um intervalo de datas específico e de um host específico, escreva três instruções:
Combinando consultas com AND
O trecho de código a seguir mostra como combinar consultas com 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());
Combinando consultas com OR
MailQueryBuilder fornece o or() método que aceita dois MailQuery instâncias como parâmetros. Ele obtém mensagens que correspondem a qualquer uma das duas condições especificadas. O exemplo abaixo filtra mensagens que têm a palavra "test" no assunto ou "noreply@host.com" como remetente. O trecho de código a seguir mostra como combinar consultas com OR.
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Filtragem de e‑mail sensível a maiúsculas/minúsculas
Emails podem ser filtrados com base em distinção de maiúsculas/minúsculas especificando o sinalizador IgnoreCase nos critérios de filtro, como mostrado no trecho de código a seguir.
// 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();
Filtrando Mensagens com Suporte a Paginação
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();
}