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:
- Hubungkan ke server Exchange.
- Buat sebuah instance MailQuery dan atur properti yang diinginkan.
- 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();
}