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:

  1. Exchange sunucusuna bağlan.
  2. MailQuery’nin bir örneğini oluşturun ve istediğiniz özellikleri ayarlayın.
  3. 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();
}