Филтриране на съобщения от Exchange пощенска кутия

Филтриране на съобщения с EWS

Този IEWSClient клас предоставя listMessages() метод, който получава всички съобщения от пощенска кутия. За да получите само съобщения, отговарящи на някакво условие, използвайте претоварения 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);

Филтриране на съобщения по стойност на низ

Следният кодов откъс показва как да филтрирате всички имейли въз основа на указания низ в заглавните полета (тема, от, до, копие). The 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

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

// 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“ като подател. Следният фрагмент от код показва как да комбинирате заявки с ИЛИ.

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();
}