Berichten filteren uit Exchange mailbox via WebDav
Berichten filteren met Web Dav
Om gefilterde berichten uit een mailbox te krijgen:
- Verbind met de Exchange-server.
- Maak een instantie van MailQuery aan en stel de gewenste eigenschappen in.
- Roep de ExchangeClient.listMessages(MailQuery query)-methode aan en geef de MailQuery door in de parameters om alleen de gefilterde berichten te krijgen.
De onderstaande codevoorbeelden tonen hoe verbinding te maken met een Exchange mailbox en berichten op te halen die de string "Newsletter" in het onderwerp hebben en vandaag zijn verzonden.
ExchangeClient client = new ExchangeClient("http://MachineName/exchange/Username", "username", "password", "domain");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");
// Emails that arrived today
try {
builder.getInternalDate().on(sdf.parse("10/05/2016 10:00:00"));
} catch (ParseException e) {
e.printStackTrace();
}
// Build the query
MailQuery query = builder.getQuery();
// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("Imap: " + messages.size() + " message(s) found.");
Berichten ophalen die aan specifieke criteria voldoen
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.
Filtercriteria datum van vandaag
De volgende codefragment toont hoe alle e-mails te filteren op basis van de datum van vandaag.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Filtercriteria datumbereik
De volgende codefragment toont hoe alle e-mails te filteren op basis van het datumbereik.
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));
Filtercriteria specifieke afzender
De volgende codefragment toont hoe alle e-mails te filteren op basis van een specifieke afzender.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Filtercriteria specifiek domein
De volgende codefragment toont hoe alle e-mails te filteren op basis van een specifiek domein.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Filtercriteria specifieke ontvanger
De volgende codefragment toont hoe alle e-mails te filteren op basis van een specifieke ontvanger.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Filtercriteria op MessageID
De volgende codefragment toont hoe alle e-mails te filteren op basis van MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");
Filtercriteria alle bezorgnotificaties
De volgende codefragment toont hoe alle e-mails te filteren op basis van alle bezorgnotificaties.
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());
Complexe queries bouwen
Als verschillende QueryBuilder‑eigenschappen in afzonderlijke statements worden ingesteld, moeten alle voorwaarden overeenkomen. Bijvoorbeeld, om een bericht te krijgen in een specifiek datumbereik en van een bepaalde host, schrijf drie statements:
Queries combineren met AND
MailQueryBuilder builder = new MailQueryBuilder();
// Emails from specific host
builder.getFrom().contains("SpecificHost.com");
// AND all emails that arrived before today
builder.getInternalDate().before(new Date());
// AND all emails that arrived since 7 days ago
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(-7)));
Queries combineren met OR
QueryBuilder biedt de or()‑methode die twee MailQuery‑instanties als parameters neemt. Hij haalt berichten op die voldoen aan een van de twee opgegeven voorwaarden. Het onderstaande voorbeeld filtert berichten die ofwel het woord "test" in het onderwerp hebben of "noreply@host.com" als afzender.
MailQueryBuilder builder = new MailQueryBuilder();
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Hoofdlettergevoelige e-mailfiltering
E-mails kunnen worden gefilterd op hoofdlettergevoeligheid door het IgnoreCase‑vlaggetje op te geven in de filtercriteria zoals getoond in het volgende voorbeeld.
//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();