Filtrar mensagens da caixa de correio Exchange usando WebDav
Filtrar mensagens usando Web Dav
Para obter mensagens filtradas de uma caixa de correio:
- Conecte-se ao servidor Exchange.
- Crie uma instância de MailQuery e defina as propriedades desejadas.
- Chame o método ExchangeClient.listMessages(MailQuery query) e passe o MailQuery nos parâmetros para obter somente as mensagens filtradas.
Os exemplos de código abaixo mostram como conectar a uma caixa de correio Exchange e obter mensagens que contenham a string "Newsletter" no assunto e que foram enviadas hoje.
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.");
Obter mensagens que atendam a critérios específicos
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.
Critério de filtro: 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());
Critério de filtro: Intervalo de datas
O trecho de código a seguir mostra como filtrar todos os e‑mails com base no intervalo de datas.
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));
Critério de filtro: Remetente específico
O trecho de código a seguir mostra como filtrar todos os e‑mails com base em um remetente específico.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Critério de filtro: 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.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Critério de filtro: 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.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Critério de filtro 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 builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");
Critério de filtro: Todas as notificações de entrega de correio
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
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());
Construindo consultas complexas
Se diferentes propriedades do QueryBuilder forem definidas em instruções separadas, todas as condições são correspondidas. 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
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)));
Combinando consultas com OR
QueryBuilder fornece o método or() que recebe duas instâncias de MailQuery como parâmetros. Ele obtém mensagens que correspondam 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.
MailQueryBuilder builder = new MailQueryBuilder();
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Filtragem de e‑mail sensível a maiúsculas/minúsculas
E‑mails podem ser filtrados com base em sensibilidade a maiúsculas/minúsculas especificando a flag IgnoreCase nos critérios de filtro, como mostrado no exemplo a seguir.
//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();