Exchange Posta Kutusundan Mesajları Filtrele
EWS ile Mesaj Filtreleme
Bu IEWSClient class, şunları sağlar listMessages() bir posta kutusundaki tüm mesajları alan metod. Belirli bir koşulu karşılayan yalnızca mesajları almak için aşırı yüklenmiş olanı kullanın. listMessages() alan metod MailQuery sınıfı bir argüman olarak. MailQuery sınıf, tarih, konu, gönderen ve alıcı gibi koşulları belirtmek için çeşitli özellikler sağlar. Ayrıca, API posta kutusundan e-posta alırken duyarlılık filtresi uygulamaya da izin verir.
Mesajları Filtreleme
Bir posta kutusundan filtrelenmiş mesajları almak için:
- Exchange sunucusuna bağlan.
- MailQuery’nin bir örneğini oluşturun ve istediğiniz özellikleri ayarlayın.
- Filtrelenmiş yalnızca mesajları almak için IEWSClient.listMessages() metodunu çağırın ve parametrelerde MailQuery’yi iletin.
Aşağıdaki kod parçacığı, bir IMAP posta kutusuna nasıl bağlanılacağını ve konu satırında "Newsletter" dizesi bulunan ve bugün gönderilen mesajları nasıl alacağınızı gösterir.
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());
}
Mesajları Kriterlere Göre Filtrele
Yukarıdaki kod örnekleri, e-posta konusuna ve tarihe göre mesajları filtreler. Diğer özelliklere göre de filtreleme yapabiliriz. Aşağıda, koşulları şu şekilde ayarlamaya dair bazı örnekler verilmiştir: MailQuery.
Mesajları Bugünün Tarihine Göre Filtrele
Aşağıdaki kod parçacığı, bugünün tarihine göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Mesajları Tarih Aralığına Göre Filtrele
Aşağıdaki kod snippet’i, tarih aralığına göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.
// 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());
Mesajları Belirli Gönderen’e Göre Filtrele
Aşağıdaki kod snippet’i, belirli bir gönderene göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Mesajları Belirli Domain’e Göre Filtrele
Aşağıdaki kod snippet’i, belirli bir domaine göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Mesajları Belirli Alıcıya Göre Filtrele
Aşağıdaki kod snippet’i, belirli bir alıcıya göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Mesajları MessageID’ye Göre Filtrele
Aşağıdaki kod snippet’i, MessageID temelinde tüm e-postaları nasıl filtreleyeceğinizi gösterir.
// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");
Tüm E-posta Teslim Bildirimlerine Göre Mesajları Filtrele
Aşağıdaki kod snippet’i, tüm posta teslim bildirimlerine göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.
// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
Mesajları Boyuta Göre Filtrele
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
Mesajları Dize Değerine Göre Filtrele
Aşağıdaki kod parçacığı, başlıklardaki (konu, gönderen, alıcı, cc) belirtilen dizeye göre tüm e-postaları nasıl filtreleyeceğinizi gösterir. getText() metod, mesajın gövdesiyle birlikte dize değerini döndürür.
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
Mesajları Artan/Azalan Sırada Filtrele
Aspose.Email şunları sağlar ComparisonField.orderBy(boolean ascending) istemcinin arama alanında artan veya azalan sıralama kullandığını gösteren değeri ayarlayan yöntem. Belirtilen kritere göre e-posta mesajlarını artan/azalan sırada sıralamanıza olanak tanır. MailQueryBuilder.
Aşağıdaki kod bölümü, mesajları artan/azalan sırada filtrelemenin nasıl yapılacağını gösterir:
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());
Karmaşık Sorgular Oluşturma
Farklı ise MailQueryBuilder özellikler ayrı bir ifadede ayarlandığında, tüm koşullar eşleşir. Örneğin, belirli bir tarih aralığında ve belirli bir sunucudan mesaj almak için üç ifade yazın:
Sorguları AND ile Birleştirme
Aşağıdaki kod bölümü, Sorguları AND ile birleştirmenin nasıl yapılacağını gösterir.
// 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());
Sorguları OR ile Birleştirme
MailQueryBuilder sağlar or() iki … alan yöntemi MailQuery örnekler parametre olarak. Belirtilen iki koşuldan herhangi birine uyan mesajları alır. Aşağıdaki örnek, konu satırında "test" kelimesi geçen veya gönderici "noreply@host.com" olan mesajları filtreler. Aşağıdaki kod bölümü, sorguları OR ile birleştirmeyi gösterir.
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Büyük/Küçük Harf Duyarlı E-posta Filtreleme
Aşağıdaki kod bölümünde gösterildiği gibi, filtre kriterinde IgnoreCase bayrağını belirterek e-postalar büyük/küçük harfe duyarlılık bazında filtrelenebilir.
// 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();
Sayfalama Desteği ile Mesaj Filtreleme
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();
}