فیلتر پیام‌ها از صندوق‌پستی Exchange

فیلتر کردن پیام‌ها با استفاده از EWS

این IEWSClient کلاس فراهم می‌کند listMessages() متدی که تمام پیام‌ها را از یک صندوق پستی دریافت می‌کند. برای دریافت تنها پیام‌هایی که شرطی را برآورده می‌کنند، از نسخهٔ overloaded استفاده کنید. listMessages() متدی که MailQuery کلاس به عنوان آرگومان.  MailQuery کلاس ویژگی‌های متنوعی برای مشخص کردن شرایط ارائه می‌دهد، برای مثال تاریخ، موضوع، فرستنده و گیرنده. علاوه بر این، API امکان اعمال فیلترهای حساس به حروف بزرگ/کوچک هنگام دریافت ایمیل‌ها از صندوق پستی را نیز فراهم می‌کند.

فیلتر کردن پیام‌ها

برای دریافت پیام‌های فیلتر شده از یک صندوق‌پستی:

  1. به سرور Exchange متصل شوید.
  2. یک نمونه از MailQuery ایجاد کنید و ویژگی‌های دلخواه را تنظیم کنید.
  3. متد IEWSClient.listMessages() را فراخوانی کنید و MailQuery را به عنوان پارامتر پاس دهید تا فقط پیام‌های فیلتر شده دریافت شوند.

قطعه کد زیر نشان می‌دهد چگونه به یک صندوق ایمیل IMAP متصل شوید و پیام‌هایی که رشته "Newsletter" در موضوع دارند و امروز ارسال شده‌اند را دریافت کنید.

try {
    // Connect to EWS
    final String mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
    final String username = "username";
    final String password = "password";
    final String domain = "domain";

    IEWSClient client = EWSClient.getEWSClient(mailboxUri, username, password, domain);

    // Query building by means of ExchangeQueryBuilder class
    ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

    // Set Subject and Emails that arrived today
    builder.getSubject().contains("Newsletter");
    builder.getInternalDate().on(new Date());

    MailQuery query = builder.getQuery();

    // Get list of messages
    ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
    System.out.println("EWS: " + messages.size() + " message(s) found.");

    // Disconnect from EWS
    client.dispose();
} catch (java.lang.RuntimeException ex) {
    System.out.println(ex.getMessage());
}

فیلتر پیام‌ها بر اساس معیار

نمونه‌های کد فوق پیام‌ها را بر اساس موضوع ایمیل و تاریخ فیلتر می‌کنند. ما می‌توانیم سایر ویژگی‌ها را نیز فیلتر کنیم. در زیر برخی مثال‌ها برای تنظیم شرایط با استفاده از MailQuery.

فیلتر پیام‌ها بر اساس تاریخ امروز

قطعه کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر اساس تاریخ امروز فیلتر کنید.

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

فیلتر پیام‌ها بر اساس بازه زمانی

کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر پایه بازه زمانی فیلتر کنید.

// Emails that arrived in last 7 days
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());

فیلتر پیام‌ها بر اساس فرستنده خاص

کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر پایه یک فرستنده خاص فیلتر کنید.

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

فیلتر پیام‌ها بر اساس دامنه خاص

کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر پایه یک دامنه خاص فیلتر کنید.

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

فیلتر پیام‌ها بر اساس گیرنده خاص

کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر پایه یک گیرنده خاص فیلتر کنید.

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

فیلتر پیام‌ها بر اساس شناسه پیام (MessageID)

کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر پایه MessageID فیلتر کنید.

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

فیلتر پیام‌ها بر اساس تمام اعلان‌های تحویل ایمیل

کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر پایه تمام اعلان‌های تحویل ایمیل فیلتر کنید.

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

فیلتر پیام‌ها بر اساس اندازه

builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);

فیلتر پیام‌ها بر اساس مقدار رشته‌ای

قطعه کد زیر نشان می‌دهد چگونه تمام ایمیل‌ها را بر اساس رشته مشخص شده در سرآیندها (موضوع، فرستنده، گیرنده، سی‌سی) فیلتر کنید. getText() متد مقدار رشته را همراه با بدنه پیام برمی‌گرداند.

 ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

builder.getText().equals("SomeText");

MailQuery query = builder.getQuery();

ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);

فیلتر پیام‌ها به ترتیب صعودی/نزولی

Aspose.Email ارائه می‌دهد ComparisonField.orderBy(boolean ascending) متد که مقدار نشان‌دهنده استفاده کلاینت از مرتب‌سازی صعودی یا نزولی بر روی فیلد جستجو را تنظیم می‌کند. این اجازه می‌دهد پیام‌های ایمیل را بر اساس معیارهای مشخص شده به ترتیب صعودی/نزولی مرتب کنید. MailQueryBuilder.

قطعه کد زیر نشان می‌دهد چگونه پیام‌ها را به ترتیب صعودی/نزولی فیلتر کنید:

MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Report");
builder.getInternalDate().since(sinceDate);
builder.getSubject().orderBy(true); // sort the subject ascending
builder.getInternalDate().orderBy(false); // sort the date descending  

ExchangeMessageInfoCollection miColl = client.listMessages(client.getMailboxInfo().getInboxUri(), builder.getQuery());

ساخت پرس‌وجوهای پیچیده

اگر متفاوت MailQueryBuilder ویژگی‌ها در یک بیان جداگانه تنظیم می‌شوند، همه شرایط مطابقت می‌یابند. برای مثال، برای دریافت پیامی در یک بازه تاریخی خاص و از یک میزبان مشخص، سه بیان بنویسید:

ترکیب پرس‌وجوها با AND

قطعه کد زیر نشان می‌دهد چگونه پرس‌وجوها را با AND ترکیب کنید.

// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.getFrom().contains("SpecificHost.com");
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());

ترکیب پرس‌وجوها با OR

MailQueryBuilder ارائه می‌دهد or() متد که دو MailQuery نمونه‌ها به‌عنوان پارامترها. این روش پیام‌هایی را که با هر یک از دو شرط مشخص شده مطابقت دارند، دریافت می‌کند. مثال زیر پیام‌هایی را فیلتر می‌کند که یا کلمه "test" در موضوع دارند یا "noreply@host.com" به عنوان فرستنده. قطعه کد زیر نشان می‌دهد چگونه پرس‌وجوها را با OR ترکیب کنید.

builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

فیلتر ایمیل حساس به حروف

ایمیل‌ها می‌توانند با حساسیت به حروف بزرگ/کوچک فیلتر شوند با مشخص کردن پرچم IgnoreCase در معیار فیلتر همان‌طور که در قطعه کد زیر نشان داده شده است.

// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getSubject().contains("Newsletter", true);
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();

فیلتر پیام‌ها با پشتیبانی از صفحه‌بندی

int itemsPerPage = 5;
String sGuid = UUID.randomUUID().toString();
String str1 = sGuid + " - " + "Query 1";
String str2 = sGuid + " - " + "Query 2";

MailQueryBuilder queryBuilder1 = new MailQueryBuilder();
queryBuilder1.getSubject().contains(str1);
MailQuery query1 = queryBuilder1.getQuery();
List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage);
pages.add(pageInfo);
int str1Count = pageInfo.getItems().size();
while (!pageInfo.getLastPage()) {
    pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage, pageInfo.getPageOffset() + 1);
    pages.add(pageInfo);
    str1Count += pageInfo.getItems().size();
}