Filter Pesan dari Kotak Surat Exchange

Menyaring Pesan menggunakan EWS

The IEWSClient class menyediakan listMessages() metode yang mengambil semua pesan dari kotak surat. Untuk mendapatkan hanya pesan yang memenuhi kondisi tertentu, gunakan versi overload listMessages() metode yang mengambil MailQuery kelas sebagai argumen. The MailQuery kelas menyediakan berbagai properti untuk menentukan kondisi, misalnya tanggal, subjek, pengirim, dan penerima. Selain itu, API juga memungkinkan penerapan filter case-sensitive untuk mengambil email dari kotak surat.

Menyaring Pesan

Untuk mendapatkan pesan yang difilter dari sebuah kotak surat:

  1. Hubungkan ke server Exchange.
  2. Buat sebuah instance MailQuery dan atur properti yang diinginkan.
  3. Panggil metode IEWSClient.listMessages() dan berikan MailQuery dalam parameter untuk hanya mendapatkan pesan yang telah difilter.

Potongan kode berikut menunjukkan cara menghubungkan ke kotak surat IMAP dan mendapatkan pesan yang memiliki string "Newsletter" di subjek dan dikirim hari ini.

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());
}

Filter Pesan berdasarkan Kriteria

Contoh kode di atas memfilter pesan berdasarkan subjek email dan tanggal. Kita juga dapat memfilter properti lain. Di bawah ini beberapa contoh penetapan kondisi menggunakan MailQuery.

Filter Pesan berdasarkan Tanggal Hari Ini

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan tanggal hari ini.

// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());

Filter Pesan berdasarkan Rentang Tanggal

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan rentang tanggal.

// 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());

Filter Pesan berdasarkan Pengirim Spesifik

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan pengirim tertentu.

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

Filter Pesan berdasarkan Domain Spesifik

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan domain tertentu.

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

Filter Pesan berdasarkan Penerima Spesifik

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan penerima tertentu.

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

Filter Pesan berdasarkan MessageID

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan MessageID.

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

Filter Pesan berdasarkan Semua Notifikasi Pengiriman Email

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan semua notifikasi pengiriman surat.

// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());

Filter Pesan berdasarkan Ukuran

builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);

Filter Pesan berdasarkan Nilai String

Potongan kode berikut menunjukkan cara memfilter semua email berdasarkan string yang ditentukan di header (subject, from, to, cc). getText() metode mengembalikan nilai string bersama dengan isi pesan.

 ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

builder.getText().equals("SomeText");

MailQuery query = builder.getQuery();

ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);

Filter Pesan dalam Urutan Naik/Turun

Aspose.Email menyediakan ComparisonField.orderBy(boolean ascending) metode yang mengatur nilai yang menunjukkan bahwa klien menggunakan pengurutan naik atau turun pada bidang pencarian. Ini memungkinkan Anda mengurutkan pesan email dalam urutan naik/turun berdasarkan kriteria yang ditentukan oleh MailQueryBuilder.

Potongan kode di bawah ini menunjukkan cara memfilter pesan dalam urutan naik/turun:

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());

Membangun Kuiri Kompleks

Jika berbeda MailQueryBuilder properti diatur dalam pernyataan terpisah, semua kondisi cocok. Misalnya, untuk mendapatkan pesan dalam rentang tanggal tertentu dan dari host spesifik, tulis tiga pernyataan:

Menggabungkan Kuiri dengan AND

Potongan kode berikut menunjukkan cara Menggabungkan Kueri dengan 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());

Menggabungkan Kuiri dengan OR

MailQueryBuilder menyediakan or() metode yang mengambil dua MailQuery instance sebagai parameter. Ini mengambil pesan yang cocok dengan salah satu dari dua kondisi yang ditentukan. Contoh di bawah memfilter pesan yang memiliki kata "test" di subjek atau "noreply@host.com" sebagai pengirim. Potongan kode berikut menunjukkan cara menggabungkan kueri dengan OR.

builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

Filter Email Sensitif Huruf

Email dapat difilter berdasarkan case-sensitivity dengan menentukan flag IgnoreCase dalam kriteria filter seperti yang ditunjukkan dalam potongan kode berikut.

// 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();

Memfilter Pesan dengan Dukungan Paging

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();
}