Filtrovat zprávy z poštovní schránky Exchange pomocí WebDav

Filtrovat zprávy pomocí Web Dav

Pro získání filtrovaných zpráv ze schránky:

  1. Připojte se k serveru Exchange.
  2. Vytvořte instanci MailQuery a nastavte požadované vlastnosti.
  3. Zavolejte metodu ExchangeClient.listMessages(MailQuery query) a předávejte MailQuery v parametrech, aby se získaly pouze filtrované zprávy.

Níže uvedené příklady kódu ukazují, jak se připojit k poštovní schránce Exchange a získat zprávy, které mají ve předmětu řetězec „Newsletter“ a byly odeslány dnes.

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.");

Získat zprávy splňující konkrétní kritéria

Ukázky kódu výše filtrují zprávy podle předmětu e‑mailu a data. Můžeme filtrovat i podle dalších vlastností. Níže jsou některé příklady nastavení podmínek pomocí MailQuery.

Filtrační kritéria: dnešní datum

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle dnešního data.

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

Filtrační kritéria: časové rozmezí

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle časového rozmezí.

MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));

Filtrační kritéria: konkrétní odesílatel

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle konkrétního odesílatele.

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

Filtrační kritéria: konkrétní doména

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle konkrétní domény.

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

Filtrační kritéria: konkrétní příjemce

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle konkrétního příjemce.

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

Filtrační kritéria: podle MessageID

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle MessageID.

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

Filtrační kritéria: Všechna oznámení o doručení pošty

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily na základě všech oznámení o doručení pošty.

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

Vytváření složitých dotazů

Pokud jsou různé vlastnosti QueryBuilder nastaveny v oddělených příkazech, všechny podmínky jsou splněny. Například pro získání zprávy v konkrétním časovém rozmezí a od určitého hostitele napište tři příkazy:

Kombinování dotazů pomocí 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)));

Kombinování dotazů pomocí OR

QueryBuilder poskytuje metodu or(), která přijímá dvě instance MailQuery jako parametry. Získá zprávy, které splňují jakoukoli z uvedených dvou podmínek. Níže uvedený příklad filtruje zprávy, které mají v předmětu slovo „test“ nebo odesílatele „noreply@host.com“.

MailQueryBuilder builder = new MailQueryBuilder();
		
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

Filtrování e‑mailů s rozlišením velikosti písmen

E‑maily lze filtrovat s rozlišením velikosti písmen zadáním příznaku IgnoreCase ve filtru, jak je ukázáno v následujícím příkladu.

//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();