Фільтрація повідомлень з поштової скриньки 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();