Filter Pesan dari Server menggunakan Klien IMAP
The ImapClient class menyediakan listMessages() metode yang mengambil semua pesan dari kotak surat. Untuk hanya mendapatkan pesan yang cocok dengan beberapa kondisi, gunakan overload listMessages() metode yang mengambil MailQuery sebagai argumen. The MailQuery kelas menyediakan berbagai properti untuk menentukan kondisi, misalnya tanggal, subjek, pengirim, penerima, dll. Contoh pertama mengilustrasikan cara memfilter pesan berdasarkan tanggal dan subjek. Kami juga menunjukkan cara memfilter berdasarkan kriteria lain dan cara membangun kueri yang lebih kompleks. API juga menyediakan kemampuan untuk menerapkan kriteria pencarian sensitif huruf besar/kecil untuk mencocokkan kriteria filter yang tepat. API juga memungkinkan penentuan encoding string pencarian untuk memfilter pesan dari kotak surat.
Menyaring Pesan dari Kotak Surat
- Hubungkan dan masuk ke server IMAP
- Buat sebuah instansi dari MailQuery dan atur properti
- Panggil ImapClient.listMessages(MailQuery query) metode dan melewatkan MailQuery dengan parameter untuk hanya mendapatkan pesan yang difilter.
Potongan kode berikut menunjukkan cara terhubung ke kotak surat IMAP dan mendapatkan pesan yang tiba hari ini serta memiliki kata "newsletter" di subjek.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP
final String host = "host";
final int port = 143;
final String username = "user@host.com";
final String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
ImapMessageInfoCollection messages = client.listMessages(query);
System.out.println("Imap: " + messages.size() + " message(s) found.");
// Disconnect from IMAP
client.dispose();
Dapatkan Pesan yang Memenuhi Kriteria Spesifik
Contoh kode di atas memfilter pesan berdasarkan subjek email dan tanggal. Kami dapat menggunakan properti lain untuk menentukan kondisi lain juga. Berikut beberapa contoh penetapan kondisi menggunakan MailQuery. Potongan kode berikut menunjukkan cara memfilter email pada:
- Tanggal hari ini.
- Rentang tanggal.
- Dari pengirim tertentu.
- Dari domain tertentu.
- Dari penerima tertentu.
Tanggal Hari Ini
Potongan kode berikut menunjukkan cara memfilter email berdasarkan Tanggal Hari Ini.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
~~
### **Date Range*
The following code snippet shows you how to filter emails on the date range.
~~~Java
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// 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());
Pengirim Khusus
Potongan kode berikut menunjukkan cara memfilter email berdasarkan pengirim tertentu.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Domain Khusus
Potongan kode berikut menunjukkan cara memfilter email berdasarkan domain tertentu.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Penerima Khusus
Potongan kode berikut menunjukkan cara memfilter email berdasarkan penerima tertentu.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Membangun Kuiri Kompleks
Jika berbeda MailQueryBuilder properti diatur dalam pernyataan terpisah, maka semua kondisi akan cocok. Misalnya, jika kita ingin mendapatkan pesan antara rentang tanggal dan dari host tertentu, kita perlu menulis tiga pernyataan.
Menggabungkan Kuiri dengan AND
Potongan kode berikut menunjukkan cara menggabungkan kueri dengan AND.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// 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 instansi sebagai parameter. Ini mengambil pesan yang cocok dengan salah satu dari dua kondisi yang ditentukan. Potongan kode berikut menunjukkan cara memfilter pesan yang memiliki “test” di subjek atau “noreply@host.com” sebagai pengirim. Potongan kode berikut menunjukkan cara menggabungkan kueri dengan OR.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Filter pada InternalDate
Pesan dapat diekstrak dari server berdasarkan InternalDate namun kadang server tidak mengembalikan semua pesan yang terlihat di kotak masuk. Penyebabnya dapat berupa zona waktu server karena mungkin tidak UTC untuk semua server seperti Gmail. Aspose mengirim perintah seperti 008 SEARCH ON 4-May-2014 sesuai dengan protokol IMAP namun hasil dapat berbeda karena pengaturan zona waktu server. Anggota baru ditambahkan dalam ImapMessageInfo sebagai InternalDate yang lebih membantu dalam memfilter pesan. Potongan kode berikut menunjukkan penggunaan InternalDate untuk memfilter pesan.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP
final String host = "host";
final int port = 143;
final String username = "user@host.com";
final String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
ImapMessageInfoCollection messages = client.listMessages(query);
for (ImapMessageInfo info : messages) {
System.out.println("Internal Date: " + info.getInternalDate());
}
// Disconnect from IMAP
client.dispose();
Penyaringan Email Sensitif Huruf Besar/Kecil
Potongan kode berikut menunjukkan cara menggunakan penyaringan email yang sensitif huruf besar/kecil.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter", true);
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();
Tentukan Encoding untuk Pembuat Kueri
API ImapQueryBuilder konstruktor dapat digunakan untuk menentukan Encoding untuk string pencarian. Ini juga dapat diatur menggunakan DefaultEncoding properti dari MailQueryBuilder. Potongan kode berikut menunjukkan cara menentukan encoding untuk pembuat kueri.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set conditions
ImapQueryBuilder builder = new ImapQueryBuilder(Charset.forName("utf-8"));
builder.getSubject().contains("ğüşıöç", true);
MailQuery query = builder.getQuery();
Filter Pesan dengan Dukungan Paging
The ImapClient menyediakan kemampuan untuk mencari pesan dari kotak surat dan menyusunnya dengan dukungan paging. Potongan kode berikut menunjukkan cara memfilter pesan dengan dukungan paging.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
/// <summary>
/// This example shows how to search for messages using ImapClient of the API with paging support
/// Introduced in Aspose.Email for .NET 6.4.0
/// </summary>
final ImapClient client = new ImapClient("host.domain.com", 84, "username", "password");
try {
try {
// Append some test messages
int messagesNum = 12;
int itemsPerPage = 5;
MailMessage message = null;
for (int i = 0; i < messagesNum; i++) {
message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35128 - " + UUID.randomUUID(), "111111111111111");
client.appendMessage(ImapFolderInfo.IN_BOX, message);
}
String body = "2222222222222";
for (int i = 0; i < messagesNum; i++) {
message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35128 - " + UUID.randomUUID(), body);
client.appendMessage(ImapFolderInfo.IN_BOX, message);
}
client.selectFolder("Inbox");
ImapQueryBuilder iqb = new ImapQueryBuilder();
iqb.getBody().contains(body);
MailQuery query = iqb.getQuery();
client.selectFolder(ImapFolderInfo.IN_BOX);
ImapMessageInfoCollection totalMessageInfoCol = client.listMessages(query);
System.out.println(totalMessageInfoCol.size());
//////////////////////////////////////////////////////
List<ImapPageInfo> pages = new ArrayList<ImapPageInfo>();
PageSettings ps = new PageSettings();
ps.setFolderName(ImapFolderInfo.IN_BOX);
PageInfo pi = new PageInfo(itemsPerPage);
ImapPageInfo pageInfo = client.listMessagesByPage(query, pi, ps);
pages.add(pageInfo);
while (!pageInfo.getLastPage()) {
pageInfo = client.listMessagesByPage(query, pageInfo.getNextPage(), ps);
pages.add(pageInfo);
}
int retrievedItems = 0;
// foreach to while statements conversion
for (ImapPageInfo folderCol : pages) {
retrievedItems += folderCol.getItems().size();
}
} finally {
}
} finally {
if (client != null)
client.dispose();
}
Filter Pesan dengan Flag Kustom
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.hasFlags(ImapMessageFlags.keyword("custom1"));
queryBuilder.hasNoFlags(ImapMessageFlags.keyword("custom2"));
Filter Pesan menggunakan Pencarian Kustom
Misalnya, standar RFC 3501 tidak mengizinkan pencarian pesan berdasarkan keberadaan lampiran dalam pesan. Namun Gmail menyediakan Ekstensi IMAP yang memungkinkan melakukan pencarian tersebut. Aspose.Email menyediakan customSearch metode dari ImapQueryBuilder kelas untuk membuat kueri yang sesuai.
Contoh kode di bawah ini menunjukkan cara mengambil daftar pesan email dari server yang memiliki lampiran, menggunakan protokol IMAP dan kriteria pencarian khusus:
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.customSearch("X-GM-RAW \"has:attachment\"");
MailQuery query = builder.getQuery();
messageInfoCol = client.listMessages(query);