Филтрирайте съобщения от пощенска кутия в Exchange, използвайки WebDav

Филтриране на съобщения чрез Web Dav

За получаване на филтрирани съобщения от пощенска кутия:

  1. Свържете се с Exchange сървър.
  2. Създайте екземпляр на MailQuery и задайте желаните свойства.
  3. Извикайте метода ExchangeClient.listMessages(MailQuery query) и предайте MailQuery като параметър, за да получите само филтрираните съобщения.

Примерните кодове по-долу показват как да се свържете с пощенска кутия в Exchange и да получите съобщения, които имат низа "Newsletter" в темата и са изпратени днес.

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

Получаване на съобщения, отговарящи на конкретни критерии

Горните кодови примери филтрират съобщенията въз основа на темата и датата на имейла. Можем да филтрираме и по други свойства. По-долу са някои примери за задаване на условията с помощта на MailQuery.

Критерий за филтриране – Датата от днес

Следният фрагмент от код показва как да филтрирате всички имейли въз основа на датата от днес.

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

Критерий за филтриране – Диапазон от дати

Следният фрагмент от код показва как да филтрирате всички имейли въз основа на диапазона от дати.

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

Критерий за филтриране – Конкретен подател

Следният фрагмент от код показва как да филтрирате всички имейли въз основа на конкретен подател.

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

Критерий за филтриране – Конкретен домейн

Следният фрагмент от код показва как да филтрирате всички имейли въз основа на конкретен домейн.

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

Критерий за филтриране – Конкретен получател

Следният фрагмент от код показва как да филтрирате всички имейли въз основа на конкретен получател.

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

Критерий за филтриране – По MessageID

Следният фрагмент от код показва как да филтрирате всички имейли въз основа на MessageID.

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

Критерий за филтриране – Всички известия за доставка на поща

Следният фрагмент от код показва как да филтрирате всички имейли въз основа на всички известия за доставка на поща.

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

Съставяне на сложни заявки

Ако различни свойства на QueryBuilder се зададат в отделни изрази, всички условия се съпоставят. Например, за да получите съобщение в определен диапазон от дати и от конкретен хост, напишете три израза:

Комбиниране на заявки с 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)));

Комбиниране на заявки с OR

QueryBuilder предоставя метода or(), който приема две инстанции на MailQuery като параметри. Той получава съобщения, отговарящи на кое да е от двете зададени условия. Примерът по-долу филтрира съобщения, които или имат думата "test" в темата, или "noreply@host.com" като подател.

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

Филтриране на имейли с чувствителност към главни/малки букви

Имейлите могат да бъдат филтрирани според чувствителност към главни/малки букви, като се зададе флагът IgnoreCase в критериите за филтър, както е показано в следния пример.

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