Filtrowanie wiadomości ze skrzynki Exchange
Filtrowanie wiadomości przy użyciu EWS
Ten IEWSClient klasa udostępnia listMessages() metoda, która pobiera wszystkie wiadomości ze skrzynki pocztowej. Aby uzyskać tylko wiadomości spełniające określony warunek, użyj przeciążonej listMessages() metoda, która przyjmuje MailQuery klasę jako argument. Ta MailQuery klasa udostępnia różne właściwości do określania warunków, takich jak data, temat, nadawca i odbiorca. Ponadto API umożliwia stosowanie filtrów wrażliwych na wielkość liter przy pobieraniu e-maili ze skrzynki pocztowej.
Filtrowanie wiadomości
Aby uzyskać filtrowane wiadomości ze skrzynki:
- Połącz się z serwerem Exchange.
- Utwórz instancję MailQuery i ustaw żądane właściwości.
- Wywołaj metodę IEWSClient.listMessages() i przekaż MailQuery w parametrach, aby otrzymać wyłącznie przefiltrowane wiadomości.
Poniższy fragment kodu pokazuje, jak połączyć się ze skrzynką pocztową IMAP i pobrać wiadomości, które w temacie zawierają ciąg "Newsletter" i zostały wysłane dzisiaj.
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());
}
Filtrowanie wiadomości według kryteriów
Powyższe przykłady kodu filtrują wiadomości na podstawie tematu e‑maila i daty. Możemy również filtrować według innych właściwości. Poniżej znajdują się przykłady ustalania warunków przy użyciu MailQuery.
Filtrowanie wiadomości według dzisiejszej daty
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e-maile na podstawie dzisiejszej daty.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Filtrowanie wiadomości według zakresu dat
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie zakresu dat.
// 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());
Filtrowanie wiadomości według konkretnego nadawcy
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie konkretnego nadawcy.
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Filtrowanie wiadomości według konkretnej domeny
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie konkretnej domeny.
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Filtrowanie wiadomości według konkretnego odbiorcy
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie określonego odbiorcy.
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Filtrowanie wiadomości według MessageID
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");
Filtrowanie wiadomości według wszystkich powiadomień o dostawie poczty
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e‑maile na podstawie powiadomień o dostawie poczty.
// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
Filtrowanie wiadomości według rozmiaru
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
Filtrowanie wiadomości według wartości ciągu znaków
Poniższy fragment kodu pokazuje, jak filtrować wszystkie e-maile na podstawie określonego ciągu znaków w nagłówkach (temat, od, do, cc). getText() metoda zwraca wartość ciągu znaków wraz z treścią wiadomości.
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
Filtrowanie wiadomości w kolejności rosnącej/malejącej
Aspose.Email udostępnia ComparisonField.orderBy(boolean ascending) metoda ustawiająca wartość wskazującą, że klient używa sortowania rosnącego lub malejącego w polu wyszukiwania. Umożliwia sortowanie wiadomości e‑mail w kolejności rosnącej/malejącej według kryteriów określonych przez MailQueryBuilder.
Poniższy fragment kodu demonstruje, jak filtrować wiadomości w kolejności rosnącej/malejącej:
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());
Budowanie złożonych zapytań
Jeśli różne MailQueryBuilder właściwości są ustawiane w osobnym wyrażeniu, wszystkie warunki są spełnione. Na przykład, aby uzyskać wiadomość w określonym przedziale dat i od konkretnego hosta, napisz trzy instrukcje:
Łączenie zapytań przy użyciu AND
Poniższy fragment kodu pokazuje, jak łączyć zapytania za 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());
Łączenie zapytań przy użyciu OR
MailQueryBuilder udostępnia or() metoda przyjmująca dwa MailQuery instancje jako parametry. Pobiera wiadomości spełniające dowolny z dwóch określonych warunków. Przykład poniżej filtruje wiadomości, które mają w temacie słowo "test" lub nadawcą "noreply@host.com". Poniższy fragment kodu pokazuje, jak łączyć zapytania za pomocą OR.
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Filtrowanie e‑maili z rozróżnieniem wielkości liter
E‑maile mogą być filtrowane z uwzględnieniem wielkości liter poprzez określenie flagi IgnoreCase w kryteriach filtrowania, jak pokazano w poniższym fragmencie kodu.
// 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();
Filtrowanie wiadomości z obsługą stronicowania
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();
}