Filtrování zpráv z poštovní schránky Exchange

Filtrování zpráv pomocí EWS

The IEWSClient třída poskytuje listMessages() metoda, která získá všechny zprávy ze schránky. Pro získání pouze zpráv, které splňují určitou podmínku, použijte přetíženou listMessages() metoda, která přijímá MailQuery třída jako argument.  MailQuery třída poskytuje různé vlastnosti pro zadání podmínek, například datum, předmět, odesílatele a příjemce. Navíc API umožňuje aplikovat filtry rozlišující velikost písmen při načítání e-mailů ze schránky.

Filtrování zpráv

Pro získání filtrovaných zpráv ze schránky:

  1. Připojte se k serveru Exchange.
  2. Vytvořte instanci MailQuery a nastavte požadované vlastnosti.
  3. Zavolejte metodu IEWSClient.listMessages() a v parametrech předávejte MailQuery, abyste získali pouze filtrované zprávy.

Následující úryvek kódu vám ukazuje, jak se připojit k IMAP schránce a získat zprávy, které mají v předmětu řetězec "Newsletter" a byly odeslány dnes.

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

Filtrovat zprávy podle kritérií

Ukázky kódu výše filtrují zprávy podle předmětu e‑mailu a data. Můžeme filtrovat i podle dalších vlastností. Níže jsou některé příklady nastavení podmínek pomocí MailQuery.

Filtrovat zprávy podle dnešního data

Následující úryvek kódu vám ukazuje, jak filtrovat všechny e-maily na základě dnešního data.

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

Filtrovat zprávy podle rozmezí dat

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle časového rozmezí.

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

Filtrovat zprávy podle konkrétního odesílatele

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle konkrétního odesílatele.

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

Filtrovat zprávy podle konkrétní domény

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle konkrétní domény.

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

Filtrovat zprávy podle konkrétního příjemce

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle konkrétního příjemce.

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

Filtrovat zprávy podle ID zprávy

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily podle MessageID.

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

Filtrovat zprávy podle všech oznámení o doručení pošty

Níže uvedený úryvek kódu ukazuje, jak filtrovat všechny e‑maily na základě všech oznámení o doručení pošty.

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

Filtrovat zprávy podle velikosti

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

Filtrovat zprávy podle řetězcové hodnoty

Následující úryvek kódu vám ukazuje, jak filtrovat všechny e-maily na základě zadaného řetězce v hlavičkách (předmět, od, komu, cc). The getText() metoda vrací řetězcovou hodnotu spolu s tělem zprávy.

 ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

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

MailQuery query = builder.getQuery();

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

Filtrujte zprávy ve vzestupném/podřadném pořadí

Aspose.Email poskytuje ComparisonField.orderBy(boolean ascending) metoda, která nastavuje hodnotu indikující, že klient používá vzestupné nebo sestupné řazení v poli vyhledávání. Umožňuje řadit e‑mailové zprávy ve vzestupném/sestupném pořadí podle kritérií specifikovaných MailQueryBuilder.

Níže uvedený úryvek kódu demonstruje, jak filtrovat zprávy ve vzestupném/sestupném pořadí:

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

Vytváření složitých dotazů

Pokud různé MailQueryBuilder vlastnosti jsou nastaveny v samostatném příkazu, všechny podmínky jsou splněny. Například pro získání zprávy v určitém časovém rozmezí a od konkrétního hostitele napište tři příkazy:

Kombinování dotazů pomocí AND

Následující úryvek kódu ukazuje, jak kombinovat dotazy pomocí 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());

Kombinování dotazů pomocí OR

MailQueryBuilder poskytuje or() metoda, která přijímá dva MailQuery instance jako parametry. Získá zprávy, které splňují některou ze dvou zadaných podmínek. Níže uvedený příklad filtruje zprávy, které mají ve předmětu slovo „test“ nebo jako odesílatele „noreply@host.com“. Následující úryvek kódu ukazuje, jak kombinovat dotazy pomocí OR.

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

Filtrování e‑mailů s rozlišením velikosti písmen

E‑mail lze filtrovat s rozlišením velkých a malých písmen zadáním příznaku IgnoreCase ve filtračních kritériích, jak je ukázáno v následujícím úryvku kódu.

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

Filtrování zpráv s podporou stránkování

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