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:
- Stellen Sie eine Verbindung zum Exchange‑Server her.
- Erstellen Sie eine Instanz von MailQuery und setzen Sie die gewünschten Eigenschaften.
- 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();
}