Filtra i messaggi dalla casella Exchange usando WebDav
Filtra Messaggi usando Web Dav
Per ottenere messaggi filtrati da una casella:
- Connettiti al server Exchange.
- Crea un’istanza di MailQuery e imposta le proprietà desiderate.
- Chiama il metodo ExchangeClient.listMessages(MailQuery query) e passa il MailQuery nei parametri per ottenere solo i messaggi filtrati.
Gli esempi di codice sotto mostrano come connettersi a una casella Exchange e ottenere messaggi che hanno la stringa "Newsletter" nell’oggetto e sono stati inviati oggi.
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.");
Ottieni Messaggi che Soddisfano Criteri Specifici
Gli esempi di codice sopra filtrano i messaggi in base all’oggetto dell’email e alla data. Possiamo filtrare anche altre proprietà. Di seguito alcuni esempi di impostazione delle condizioni usando MailQuery.
Criteri di Filtro Data di Oggi
Il seguente frammento di codice mostra come filtrare tutte le email in base alla data di oggi.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Criteri di Filtro Intervallo di Date
Il seguente frammento di codice mostra come filtrare tutte le email in base all’intervallo di date.
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));
Criteri di Filtro Mittente Specifico
Il seguente frammento di codice mostra come filtrare tutte le email in base a un mittente specifico.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Criteri di Filtro Dominio Specifico
Il seguente frammento di codice mostra come filtrare tutte le email in base a un dominio specifico.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Criteri di Filtro Destinatario Specifico
Il seguente frammento di codice mostra come filtrare tutte le email in base a un destinatario specifico.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Criteri di Filtro per MessageID
Il seguente frammento di codice mostra come filtrare tutte le email in base al MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");
Criteri di Filtro Tutte le Notifiche di Consegna della Mail
Il seguente frammento di codice mostra come filtrare tutte le email in base a tutte le notifiche di consegna della posta.
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());
Costruire Query Complesse
Se diverse proprietà di QueryBuilder sono impostate in istruzioni separate, tutte le condizioni vengono soddisfatte. Per esempio, per ottenere un messaggio in un intervallo di date specifico e da un host specifico, scrivi tre istruzioni:
Combinare Query 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)));
Combinare Query con OR
QueryBuilder fornisce il metodo or() che prende due istanze MailQuery come parametri. Ottiene i messaggi che corrispondono a una delle due condizioni specificate. L’esempio sotto filtra i messaggi che hanno la parola "test" nell’oggetto o "noreply@host.com" come mittente.
MailQueryBuilder builder = new MailQueryBuilder();
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Filtraggio Email Sensibile al Maiuscolo/Minuscolo
Le email possono essere filtrate in base alla sensibilità al maiuscolo/minuscolo specificando il flag IgnoreCase nei criteri di filtro come mostrato nel seguente esempio.
//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();