Filtrer les messages de la boîte aux lettres Exchange en utilisant WebDav
Filtrer les messages avec Web Dav
Pour obtenir les messages filtrés d’une boîte aux lettres :
- Connectez‑vous au serveur Exchange.
- Créez une instance de MailQuery et définissez les propriétés souhaitées.
- Appelez la méthode ExchangeClient.listMessages(MailQuery query) et transmettez le MailQuery dans les paramètres pour obtenir uniquement les messages filtrés.
Les exemples de code ci‑dessous montrent comment se connecter à une boîte aux lettres Exchange et récupérer les messages qui contiennent la chaîne "Newsletter" dans l’objet et qui ont été envoyés aujourd’hui.
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.");
Obtenir les messages qui répondent à des critères spécifiques
Les exemples de code ci‑dessus filtrent les messages en fonction de l’objet du courriel et de la date. Nous pouvons aussi filtrer d’autres propriétés. Vous trouverez ci‑dessous quelques exemples de définition des conditions en utilisant MailQuery.
Critère de filtrage : Date du jour
Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction de la date du jour.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Critère de filtrage : Plage de dates
Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction de la plage de dates.
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));
Critère de filtrage : Expéditeur spécifique
Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction d’un expéditeur spécifique.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Critère de filtrage : Domaine spécifique
Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction d’un domaine spécifique.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Critère de filtrage: Destinataire spécifique
Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction d’un destinataire spécifique.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Critère de filtrage par MessageID
Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction du MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");
Critère de filtrage : Toutes les notifications de livraison de courrier
Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction de toutes les notifications de livraison du courrier.
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());
Construire des requêtes complexes
Si différentes propriétés de QueryBuilder sont définies dans des instructions séparées, toutes les conditions sont prises en compte. Par exemple, pour obtenir un message dans une plage de dates particulière et d’un hôte spécifique, écrivez trois instructions :
Combiner des requêtes avec 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)));
Combiner des requêtes avec OR
QueryBuilder fournit la méthode or() qui prend deux instances de MailQuery en paramètres. Elle récupère les messages qui correspondent à l’une ou l’autre des deux conditions spécifiées. L’exemple ci-dessous filtre les messages qui ont soit le mot "test" dans l’objet, soit "noreply@host.com" comme expéditeur.
MailQueryBuilder builder = new MailQueryBuilder();
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Filtrage d’e-mails sensible à la casse
Les courriels peuvent être filtrés en fonction de la sensibilité à la casse en spécifiant le drapeau IgnoreCase dans les critères de filtrage comme le montre l’exemple suivant.
//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();