WebDav kullanarak Exchange Mailbox'tan Mesajları Filtrele

Web Dav kullanarak Mesajları Filtrele

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. ExchangeClient.listMessages(MailQuery query) yöntemini çağırın ve parametrelerde MailQuery’i geçirerek sadece filtrelenmiş mesajları alın.

Aşağıdaki kod örnekleri, bir Exchange posta kutusuna nasıl bağlanılacağını ve konu satırında "Newsletter" içeren, bugün gönderilen mesajları nasıl alacağınızı gösterir.

ExchangeClient client = new ExchangeClient("http://MachineName/exchange/Username", "username", "password", "domain");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");

// Emails that arrived today
try {
	builder.getInternalDate().on(sdf.parse("10/05/2016 10:00:00"));
} catch (ParseException e) {
	e.printStackTrace();
}

// Build the query
MailQuery query = builder.getQuery();

// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("Imap: " + messages.size() + " message(s) found.");

Belirli Kriterleri Karşılayan Mesajları Al

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.

Filtre Kriteri: Bugünün Tarihi

Aşağıdaki kod snippet’i, 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());

Filtre Kriteri: Tarih Aralığı

Aşağıdaki kod snippet’i, tarih aralığına göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.

MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));

Filtre Kriteri: Belirli Gönderici

Aşağıdaki kod snippet’i, belirli bir gönderene göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.

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

Filtre Kriteri: Belirli Domain

Aşağıdaki kod snippet’i, belirli bir domaine göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.

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

Filtre Kriteri: Belirli Alıcı

Aşağıdaki kod snippet’i, belirli bir alıcıya göre tüm e-postaları nasıl filtreleyeceğinizi gösterir.

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

Filtre Kriteri: MessageID’ye Göre

Aşağıdaki kod snippet’i, MessageID temelinde tüm e-postaları nasıl filtreleyeceğinizi gösterir.

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

Filtre Kriteri: Tüm Posta Teslim Bildirimleri

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
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());

Karmaşık Sorgular Oluşturma

Farklı QueryBuilder özellikleri ayrı ifadelerde ayarlanırsa, tüm koşullar eşleşir. Örneğin, belirli bir tarih aralığında ve belirli bir sunucudan gelen bir mesajı almak için üç ifade yazın:

Sorguları AND ile Birleştirme

MailQueryBuilder builder = new MailQueryBuilder();

// Emails from specific host
builder.getFrom().contains("SpecificHost.com");
// AND all emails that arrived before today
builder.getInternalDate().before(new Date());
// AND all emails that arrived since 7 days ago
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(-7)));

Sorguları OR ile Birleştirme

QueryBuilder, iki MailQuery örneğini parametre olarak alan or() yöntemini sağlar. Belirtilen iki koşuldan herhangi birine uyan mesajları alır. Aşağıdaki örnek, konu satırında "test" kelimesi bulunan ya da göndereni "noreply@host.com" olan mesajları filtreler.

MailQueryBuilder builder = new MailQueryBuilder();
		
// Specify OR condition
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 örnekte gösterildiği gibi, filtre kriterlerinde IgnoreCase bayrağını belirterek e-postalar büyük/küçük harf duyarlılığına göre filtrelenebilir.

//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();