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:
- Verbinden met de Exchange‑server.
- Maak een instantie van MailQuery aan en stel de gewenste eigenschappen in.
- 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();
}