Filtrer les messages de la boîte aux lettres Exchange

Filtrer les messages avec EWS

Le IEWSClient classe fournit le listMessages() méthode qui récupère tous les messages d’une boîte aux lettres. Pour obtenir uniquement les messages correspondant à une condition, utilisez la surcharge listMessages() méthode qui prend le MailQuery classe en tant qu’argument. Le MailQuery la classe fournit diverses propriétés pour spécifier des conditions, par exemple, date, objet, expéditeur et destinataire. De plus, l’API permet également d’appliquer des filtres sensibles à la casse pour récupérer les e‑mails de la boîte aux lettres.

Filtrage des messages

Pour obtenir les messages filtrés d’une boîte aux lettres :

  1. Connectez‑vous au serveur Exchange.
  2. Créez une instance de MailQuery et définissez les propriétés souhaitées.
  3. Appelez la méthode IEWSClient.listMessages() et transmettez le MailQuery dans les paramètres pour obtenir uniquement les messages filtrés.

Le fragment de code suivant vous montre comment se connecter à une boîte aux lettres IMAP et récupérer les messages qui contiennent la chaîne "Newsletter" dans l’objet et qui ont été envoyés aujourd’hui.

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());
}

Filtrer les messages par critères

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.

Filtrer les messages par la date d’aujourd’hui

Le fragment de code suivant vous montre comment filtrer tous les e‑mails en fonction de la date d’aujourd’hui.

// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());

Filtrer les messages par plage de dates

Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction de la plage de dates.

// 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());

Filtrer les messages par expéditeur spécifique

Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction d’un expéditeur spécifique.

// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");

Filtrer les messages par domaine spécifique

Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction d’un domaine spécifique.

// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");

Filtrer les messages par destinataire spécifique

Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction d’un destinataire spécifique.

// Get emails sent to specific recipient
builder.getTo().contains("recipient");

Filtrer les messages par MessageID

Le fragment de code suivant vous montre comment filtrer tous les courriels en fonction du MessageID.

// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");

Filtrer les messages par toutes les notifications de remise 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
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());

Filtrer les messages par taille

builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);

Filtrer les messages par valeur de chaîne

Le fragment de code suivant vous montre comment filtrer tous les e‑mails en fonction de la chaîne spécifiée dans les en‑têtes (objet, de, à, cc). Le getText() la méthode renvoie la valeur chaîne ainsi que le corps du message.

 ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

builder.getText().equals("SomeText");

MailQuery query = builder.getQuery();

ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);

Filtrer les messages par ordre croissant/décroissant

Aspose.Email fournit le ComparisonField.orderBy(boolean ascending) méthode qui définit la valeur indiquant que le client utilise le tri croissant ou décroissant sur le champ de recherche. Elle vous permet de trier les e‑mails en ordre croissant/décroissant selon les critères spécifiés par MailQueryBuilder.

L’extrait de code ci‑dessous montre comment filtrer les messages en ordre croissant/décroissant :

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());

Construire des requêtes complexes

Si différent MailQueryBuilder les propriétés sont définies dans une instruction séparée, toutes les conditions sont correspondantes. 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

L’extrait de code suivant montre comment combiner les requêtes avec 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());

Combiner des requêtes avec OR

MailQueryBuilder fournit le or() méthode qui prend deux MailQuery instances comme paramètres. Il récupère les messages qui correspondent à l’une 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. L’extrait de code suivant montre comment combiner des requêtes avec OR.

builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

Filtrage d’e-mails sensible à la casse

Les e‑mails peuvent être filtrés selon la sensibilité à la casse en spécifiant le drapeau IgnoreCase dans les critères de filtrage comme le montre l’extrait de code suivant.

// 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();

Filtrage des messages avec prise en charge de la pagination

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();
}