Nachrichten aus Exchange‑Postfach filtern

Nachrichten mittels EWS filtern

Die IEWSClient class provides the listMessages() Methode, die alle Nachrichten aus einem Postfach abruft. Um nur Nachrichten zu erhalten, die einer Bedingung entsprechen, verwenden Sie die überladene listMessages() Methode, die das MailQuery Klasse als Argument. Die MailQuery class bietet verschiedene Eigenschaften zum Festlegen von Bedingungen, zum Beispiel Datum, Betreff, Absender und Empfänger. Zusätzlich erlaubt die API das Anwenden von Groß‑/Kleinschreibung‑Filtern beim Abrufen von E‑Mails aus dem Postfach.

Nachrichten filtern

Um gefilterte Nachrichten aus einem Postfach zu erhalten:

  1. Stellen Sie eine Verbindung zum Exchange‑Server her.
  2. Erstellen Sie eine Instanz von MailQuery und setzen Sie die gewünschten Eigenschaften.
  3. Rufen Sie die Methode IEWSClient.listMessages() auf und übergeben Sie den MailQuery in den Parametern, um nur die gefilterten Nachrichten zu erhalten.

Das folgende Code‑Snippet zeigt, wie Sie sich mit einem IMAP‑Postfach verbinden und Nachrichten abrufen, die den String "Newsletter" im Betreff enthalten und heute gesendet wurden.

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

Nachrichten nach Kriterien filtern

Die obigen Codebeispiele filtern Nachrichten anhand des E-Mail-Betreffs und des Datums. Wir können auch nach anderen Eigenschaften filtern. Nachstehend einige Beispiele für das Festlegen von Bedingungen mit MailQuery.

Nachrichten nach heutigem Datum filtern

Das folgende Code‑Snippet zeigt, wie Sie alle E‑Mails anhand des heutigen Datums filtern.

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

Nachrichten nach Datumsbereich filtern

Der folgende Codeabschnitt zeigt, wie Sie alle E-Mails nach dem Datumsbereich filtern.

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

Nachrichten nach bestimmtem Absender filtern

Der folgende Codeabschnitt zeigt, wie Sie alle E-Mails nach einem bestimmten Absender filtern.

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

Nachrichten nach bestimmter Domain filtern

Der folgende Codeabschnitt zeigt, wie Sie alle E-Mails nach einer bestimmten Domain filtern.

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

Nachrichten nach bestimmtem Empfänger filtern

Der folgende Codeabschnitt zeigt, wie Sie alle E-Mails nach einem bestimmten Empfänger filtern.

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

Nachrichten nach MessageID filtern

Der folgende Codeabschnitt zeigt, wie Sie alle E-Mails nach MessageID filtern.

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

Nachrichten nach allen Zustellungsbenachrichtigungen filtern

Der folgende Codeabschnitt zeigt, wie Sie alle E-Mails basierend auf allen Zustellungsbenachrichtigungen filtern.

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

Nachrichten nach Größe filtern

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

Nachrichten nach Zeichenkettenwert filtern

Das folgende Code‑Snippet zeigt, wie Sie alle E‑Mails anhand des angegebenen Strings in den Kopfzeilen (Betreff, Von, An, CC) filtern können. Das getText() Methode gibt den Zeichenkettenwert zusammen mit dem Nachrichtenkörper zurück.

 ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

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

MailQuery query = builder.getQuery();

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

Nachrichten nach aufsteigender/absteigender Reihenfolge filtern

Aspose.Email provides the ComparisonField.orderBy(boolean ascending) Methode, die den Wert festsetzt, der angibt, dass der Client die Sortierung im Suchfeld aufsteigend oder absteigend verwendet. Sie ermöglicht das Sortieren von E‑Mail‑Nachrichten in auf- oder absteigender Reihenfolge basierend auf den von MailQueryBuilder.

Das nachstehende Code‑Snippet demonstriert, wie man Nachrichten in aufsteigender/absteigender Reihenfolge filtert:

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

Komplexe Abfragen erstellen

Falls unterschiedlich MailQueryBuilder Eigenschaften werden in einer separaten Anweisung gesetzt, alle Bedingungen werden erfüllt. Beispiel: Um eine Nachricht in einem bestimmten Datumsbereich und von einem bestimmten Host zu erhalten, schreiben Sie drei Anweisungen:

Abfragen mit AND kombinieren

Das folgende Code‑Snippet zeigt, wie man Abfragen mit AND kombiniert.

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

Abfragen mit OR kombinieren

MailQueryBuilder stellt die or() Methode, die zwei MailQuery Instanzen als Parameter. Es holt Nachrichten, die einer der beiden angegebenen Bedingungen entsprechen. Das nachstehende Beispiel filtert Nachrichten, die entweder das Wort "test" im Betreff enthalten oder "noreply@host.com" als Absender haben. Das folgende Code‑Snippet zeigt, wie Abfragen mit OR kombiniert werden.

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

Fallabhängige E-Mail-Filterung

E‑Mails können nach Groß‑/Kleinschreibung gefiltert werden, indem das Flag IgnoreCase in den Filterkriterien angegeben wird, wie im folgenden Code‑Snippet gezeigt.

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

Nachrichten mit Paging‑Unterstützung filtern

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