Berichten filteren uit Exchange‑mailbox

Berichten filteren met EWS

De IEWSClient class biedt de listMessages() methode die alle berichten uit een postbus haalt. Gebruik de overladen listMessages() methode die de MailQuery klasse als argument. De MailQuery klasse biedt verschillende eigenschappen voor het specificeren van voorwaarden, bijvoorbeeld datum, onderwerp, afzender en ontvanger. Bovendien maakt de API het mogelijk om hoofdlettergevoelige filters toe te passen bij het ophalen van e‑mails uit de postbus.

Berichten filteren

Om gefilterde berichten uit een mailbox te krijgen:

  1. Verbinden met de Exchange‑server.
  2. Maak een instantie van MailQuery aan en stel de gewenste eigenschappen in.
  3. Roep de IEWSClient.listMessages()-methode aan en geef de MailQuery door in de parameters om alleen de gefilterde berichten te krijgen.

Het volgende codefragment toont hoe u verbinding kunt maken met een IMAP‑postbus en berichten kunt ophalen waarvan het onderwerp de tekenreeks "Newsletter" bevat en die vandaag zijn verzonden.

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

Berichten filteren op criteria

De bovenstaande codevoorbeelden filteren berichten op basis van het e-mailonderwerp en de datum. We kunnen ook op andere eigenschappen filteren. Hieronder staan enkele voorbeelden van het instellen van de voorwaarden met behulp van MailQuery.

Berichten filteren op datum van vandaag

Het volgende codefragment toont hoe u alle e‑mails kunt filteren op basis van de datum van vandaag.

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

Berichten filteren op datumbereik

De volgende codefragment toont hoe alle e-mails te filteren op basis van het datumbereik.

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

Berichten filteren op specifieke afzender

De volgende codefragment toont hoe alle e-mails te filteren op basis van een specifieke afzender.

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

Berichten filteren op specifiek domein

De volgende codefragment toont hoe alle e-mails te filteren op basis van een specifiek domein.

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

Berichten filteren op specifieke ontvanger

De volgende codefragment toont hoe alle e-mails te filteren op basis van een specifieke ontvanger.

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

Berichten filteren op bericht‑ID

De volgende codefragment toont hoe alle e-mails te filteren op basis van MessageID.

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

Berichten filteren op alle afleveringsmeldingen

De volgende codefragment toont hoe alle e-mails te filteren op basis van alle bezorgnotificaties.

// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());

Berichten filteren op grootte

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

Berichten filteren op tekenreekswaarde

De volgende codefragment toont hoe u alle e‑mails kunt filteren op basis van de opgegeven tekenreeks in de headers (onderwerp, van, naar, cc). De getText() methode geeft de tekenreekswaarde terug samen met de inhoud van het bericht.

 ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

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

MailQuery query = builder.getQuery();

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

Berichten filteren in oplopende/aflopende volgorde

Aspose.Email biedt de ComparisonField.orderBy(boolean ascending) methode die de waarde instelt die aangeeft dat de client oplopend of aflopend sorteert op het zoekveld. Hiermee kunt u e‑mailberichten sorteren in oplopende/aflopende volgorde op basis van de criteria gespecificeerd door MailQueryBuilder.

Het onderstaande codefragment laat zien hoe u berichten filtert in oplopende/aflopende volgorde:

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

Complexe queries bouwen

Als verschillend MailQueryBuilder eigenschappen worden in een aparte verklaring ingesteld; alle voorwaarden komen overeen. Bijvoorbeeld, om een bericht te verkrijgen binnen een bepaald datumbereik en van een specifieke host, schrijft u drie statements:

Queries combineren met AND

Het volgende codefragment toont hoe u queries combineert met 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());

Queries combineren met OR

MailQueryBuilder biedt de or() methode die twee MailQuery instanties als parameters. Het haalt berichten op die aan een van de twee gespecificeerde voorwaarden voldoen. Het onderstaande voorbeeld filtert berichten die ofwel het woord "test" in de onderwerpregel hebben of "noreply@host.com" als afzender. Het volgende codefragment toont hoe u queries combineert met OR.

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

Hoofdlettergevoelige e-mailfiltering

E‑mails kunnen gefilterd worden op hoofdlettergevoeligheid door de IgnoreCase‑vlag op te geven in de filtercriteria, zoals getoond in het volgende codefragment.

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

Berichten filteren met paginering

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