Filtrera meddelanden från Exchange‑brevlåda
Filtrering av meddelanden med EWS
Den IEWSClient klass tillhandahåller listMessages() metod som hämtar alla meddelanden från en inkorg. För att endast få meddelanden som matchar ett visst villkor, använd den överlagrade listMessages() metod som tar emot MailQuery klass som argument. Den MailQuery klassen tillhandahåller olika egenskaper för att specificera villkor, till exempel datum, ämne, avsändare och mottagare. Dessutom möjliggör API:et att använda skiftlägeskänsliga filter för att hämta e‑post från inkorgen.
Filtrering av meddelanden
För att få filtrerade meddelanden från en inkorg:
- Anslut till Exchange‑servern.
- Skapa en instans av MailQuery och sätt önskade egenskaper.
- Anropa metoden IEWSClient.listMessages() och skicka med MailQuery i parametrarna för att endast få de filtrerade meddelandena.
Följande kodavsnitt visar hur du ansluter till en IMAP-inkorg och hämtar meddelanden som har strängen "Newsletter" i ämnet och som skickades idag.
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());
}
Filtrera meddelanden efter kriterier
Kodexemplen ovan filtrerar meddelanden baserat på e‑postens ämne och datum. Vi kan också filtrera på andra egenskaper. Nedan följer några exempel på att sätta villkoren med hjälp av MailQuery.
Filtrera meddelanden efter dagens datum
Följande kodavsnitt visar hur du filtrerar alla e‑postmeddelanden baserat på dagens datum.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Filtrera meddelanden efter datumintervall
Följande kodsnutt visar hur du filtrerar alla e‑postmeddelanden baserat på datumintervall.
// 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());
Filtrera meddelanden efter specifik avsändare
Följande kodsnutt visar hur du filtrerar alla e‑postmeddelanden baserat på en specifik avsändare.
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Filtrera meddelanden efter specifik domän
Följande kodsnutt visar hur du filtrerar alla e‑postmeddelanden baserat på en specifik domän.
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Filtrera meddelanden efter specifik mottagare
Följande kodsnutt visar hur du filtrerar alla e‑postmeddelanden baserat på en specifik mottagare.
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Filtrera meddelanden efter meddelande-ID
Följande kodsnutt visar hur du filtrerar alla e‑postmeddelanden baserat på MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");
Filtrera meddelanden efter alla leveransaviseringar
Följande kodsnutt visar hur du filtrerar alla e‑postmeddelanden baserat på alla leveransaviseringar.
// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
Filtrera meddelanden efter storlek
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
Filtrera meddelanden efter strängvärde
Följande kodavsnitt visar hur du filtrerar alla e‑postmeddelanden baserat på den angivna strängen i rubrikerna (ämne, från, till, cc). Det getText() metoden returnerar strängvärdet tillsammans med meddelandekroppen.
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
Filtrera meddelanden i stigande/avtagande ordning
Aspose.Email tillhandahåller ComparisonField.orderBy(boolean ascending) metod som sätter värdet som anger om klienten använder stigande eller fallande sortering på sökfältet. Den låter dig sortera e‑postmeddelanden i stigande/fallande ordning baserat på de kriterier som specificerats av MailQueryBuilder.
Kodavsnittet nedan demonstrerar hur man filtrerar meddelanden i stigande/fallande ordning:
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());
Bygga komplexa frågor
Om olika MailQueryBuilder egenskaper sätts i ett separat uttalande, alla villkor matchas. Till exempel, för att hämta ett meddelande inom ett specifikt datumintervall och från en viss värd, skriv tre uttalanden:
Kombinera frågor med AND
Följande kodavsnitt visar hur du kombinerar frågor med 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());
Kombinera frågor med OR
MailQueryBuilder tillhandahåller or() metod som tar två MailQuery instanser som parametrar. Den hämtar meddelanden som matchar någon av de två specificerade villkoren. Exemplet nedan filtrerar meddelanden som antingen har ordet "test" i ämnet eller "noreply@host.com" som avsändare. Följande kodavsnitt visar hur du kombinerar frågor med OR.
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Skiftlägeskänslig e‑postfiltrering
E‑post kan filtreras med hänsyn till skiftlägeskänslighet genom att ange flaggan IgnoreCase i filterkriterierna enligt följande kodavsnitt.
// 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();
Filtrera meddelanden med stöd för sidindelning
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();
}