فیلتر پیام‌ها از صندوق‌پستی 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();