Filtra messaggi dalla casella di posta Exchange
Filtrare i messaggi usando EWS
Il IEWSClient classe fornisce il listMessages() metodo che ottiene tutti i messaggi da una casella di posta. Per ottenere solo i messaggi che corrispondono a una certa condizione, usa il sovraccaricato listMessages() metodo che prende il MailQuery classe come argomento. Il MailQuery la classe fornisce varie proprietà per specificare le condizioni, ad esempio data, oggetto, mittente e destinatario. Inoltre, l’API consente di applicare filtri sensibili al maiuscolo/minuscolo per recuperare le email dalla casella di posta.
Filtrare i messaggi
Per ottenere messaggi filtrati da una casella:
- Connetti al server Exchange.
- Crea un’istanza di MailQuery e imposta le proprietà desiderate.
- Chiama il metodo IEWSClient.listMessages() e passa il MailQuery nei parametri per ottenere solo i messaggi filtrati.
Il seguente frammento di codice mostra come connettersi a una casella di posta IMAP e ottenere i messaggi che contengono la stringa "Newsletter" nell’oggetto e sono stati inviati oggi.
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());
}
Filtra i messaggi per criteri
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.
Filtra i messaggi per la data di oggi
Il seguente frammento di codice mostra come filtrare tutte le email sulla base della data di oggi.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Filtra i messaggi per intervallo di date
Il seguente frammento di codice mostra come filtrare tutte le email in base all’intervallo di date.
// 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());
Filtra i messaggi per mittente specifico
Il seguente frammento di codice mostra come filtrare tutte le email in base a un mittente specifico.
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Filtra i messaggi per dominio specifico
Il seguente frammento di codice mostra come filtrare tutte le email in base a un dominio specifico.
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Filtra i messaggi per destinatario specifico
Il seguente frammento di codice mostra come filtrare tutte le email in base a un destinatario specifico.
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Filtra i messaggi per MessageID
Il seguente frammento di codice mostra come filtrare tutte le email in base al MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");
Filtra i messaggi per tutte le notifiche di consegna della posta
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
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
Filtra i messaggi per dimensione
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
Filtra i messaggi per valore stringa
Il seguente frammento di codice mostra come filtrare tutte le email sulla base della stringa specificata nelle intestazioni (oggetto, da, a, cc). Il getText() il metodo restituisce il valore stringa insieme al corpo del messaggio.
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
Filtra i messaggi in ordine ascendente/descendente
Aspose.Email fornisce il ComparisonField.orderBy(boolean ascending) metodo che imposta il valore che indica se il client utilizza ordinamento ascendente o discendente sul campo di ricerca. Permette di ordinare le email in ordine ascendente/descendente basandosi sui criteri specificati da MailQueryBuilder.
Il frammento di codice sotto dimostra come filtrare i messaggi in ordine 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());
Costruire Query Complesse
Se diversi MailQueryBuilder le proprietà sono impostate in una dichiarazione separata, tutte le condizioni sono soddisfatte. Ad esempio, per ottenere un messaggio in un intervallo di date specifico e da un host particolare, scrivi tre istruzioni:
Combinare Query con AND
Il seguente frammento di codice mostra come combinare query 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());
Combinare Query con OR
MailQueryBuilder fornisce il or() metodo che prende due MailQuery istanze come parametri. Ottiene i messaggi che corrispondono a una delle due condizioni specificate. L’esempio qui sotto filtra i messaggi che hanno la parola "test" nell’oggetto o "noreply@host.com" come mittente. Il seguente frammento di codice mostra come combinare query con OR.
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 a maiuscole/minuscole specificando il flag IgnoreCase nei criteri di filtro come mostrato nel seguente frammento di codice.
// 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();
Filtrare i messaggi con supporto alla paginazione
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();
}