Filtrowanie wiadomości z skrzynki Exchange przy użyciu WebDav
Filtrowanie wiadomości przy użyciu Web Dav
Aby uzyskać filtrowane wiadomości ze skrzynki:
- Połącz się z serwerem Exchange.
- Utwórz instancję MailQuery i ustaw żądane właściwości.
- Wywołaj metodę ExchangeClient.listMessages(MailQuery query) i przekaż w parametrze obiekt MailQuery, aby uzyskać tylko filtrowane wiadomości.
Poniższe przykłady kodu pokazują, jak połączyć się ze skrzynką Exchange i pobrać wiadomości, które mają w temacie ciąg "Newsletter" oraz zostały wysłane dzisiaj.
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.");
Pobieranie wiadomości spełniających określone kryteria
Powyższe przykłady kodu filtrują wiadomości na podstawie tematu e‑maila i daty. Możemy również filtrować według innych właściwości. Poniżej znajdują się przykłady ustalania warunków przy użyciu MailQuery.
Kryterium filtru: dzisiejsza data
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie dzisiejszej daty.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Kryterium filtru: zakres dat
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie zakresu dat.
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));
Kryterium filtru: konkretny nadawca
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie konkretnego nadawcy.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Kryterium filtru: konkretna domena
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie konkretnej domeny.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Kryterium filtru: konkretny odbiorca
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie określonego odbiorcy.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Kryterium filtru: MessageID
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");
Kryterium filtru: Wszystkie powiadomienia o dostawie poczty
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie powiadomień o dostawie poczty.
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());
Budowanie złożonych zapytań
Jeśli różne właściwości QueryBuilder są ustawiane w osobnych instrukcjach, wszystkie warunki muszą być spełnione. Na przykład, aby otrzymać wiadomość z określonego zakresu dat i od konkretnego hosta, napisz trzy instrukcje:
Łączenie zapytań przy użyciu 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)));
Łączenie zapytań przy użyciu OR
QueryBuilder udostępnia metodę or(), która przyjmuje dwa obiekty MailQuery jako parametry. Pobiera wiadomości, które spełniają dowolny z dwóch określonych warunków. Poniższy przykład filtruje wiadomości, które mają w temacie słowo "test" lub nadawcą "noreply@host.com".
MailQueryBuilder builder = new MailQueryBuilder();
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Filtrowanie e‑maili z rozróżnieniem wielkości liter
E‑maile można filtrować z uwzględnieniem wielkości liter, określając flagę IgnoreCase w kryteriach filtru, jak pokazano w poniższym przykładzie.
//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();