Lọc tin nhắn từ Hộp thư Exchange
Lọc Tin nhắn bằng EWS
Cái IEWSClient class cung cấp listMessages() phương thức lấy tất cả tin nhắn từ hộp thư. Để chỉ lấy các tin nhắn khớp với một số điều kiện, hãy sử dụng phiên bản overload. listMessages() phương thức nhận vào MailQuery lớp như một đối số. MailQuery lớp cung cấp nhiều thuộc tính khác nhau để chỉ định các điều kiện, ví dụ: ngày, tiêu đề, người gửi và người nhận. Ngoài ra, API cũng cho phép áp dụng bộ lọc phân biệt chữ hoa/thường khi truy xuất email từ hộp thư.
Lọc Tin nhắn
Để lấy các tin nhắn đã lọc từ hộp thư:
- Kết nối tới máy chủ Exchange.
- Tạo một thể hiện của MailQuery và thiết lập các thuộc tính mong muốn.
- Gọi phương thức IEWSClient.listMessages() và truyền MailQuery trong các tham số để chỉ lấy các tin nhắn đã lọc.
Đoạn mã sau đây cho bạn thấy cách kết nối tới hộp thư IMAP và lấy các tin nhắn có chuỗi "Newsletter" trong tiêu đề và được gửi hôm nay.
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());
}
Lọc Tin nhắn theo Tiêu chí
Các mẫu mã trên lọc tin nhắn dựa trên tiêu đề và ngày của email. Chúng ta cũng có thể lọc theo các thuộc tính khác. Dưới đây là một số ví dụ về việc thiết lập điều kiện bằng cách sử dụng MailQuery.
Lọc Tin nhắn theo Ngày hôm nay
Đoạn mã sau đây cho bạn biết cách lọc tất cả email dựa trên ngày hôm nay.
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Lọc Tin nhắn theo Khoảng ngày
Đoạn mã dưới đây cho bạn thấy cách lọc tất cả email dựa trên khoảng thời gian.
// 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());
Lọc Tin nhắn theo Người gửi Cụ thể
Đoạn mã dưới đây cho bạn thấy cách lọc tất cả email dựa trên một người gửi cụ thể.
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Lọc Tin nhắn theo Miền Cụ thể
Đoạn mã dưới đây cho bạn thấy cách lọc tất cả email dựa trên một miền cụ thể.
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Lọc Tin nhắn theo Người nhận Cụ thể
Đoạn mã dưới đây cho bạn thấy cách lọc tất cả email dựa trên một người nhận cụ thể.
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Lọc Tin nhắn theo MessageID
Đoạn mã dưới đây cho bạn thấy cách lọc tất cả email dựa trên MessageID.
// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");
Lọc Tin nhắn theo Tất cả Thông báo Giao thư
Đoạn mã dưới đây cho bạn thấy cách lọc tất cả email dựa trên tất cả các thông báo giao thư.
// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
Lọc Tin nhắn theo Kích thước
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
Lọc Tin nhắn theo Giá trị Chuỗi
Đoạn mã sau đây cho bạn thấy cách lọc tất cả email dựa trên chuỗi được chỉ định trong các tiêu đề (subject, from, to, cc). The getText() phương thức trả về giá trị chuỗi cùng với phần thân của tin nhắn.
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
Lọc Tin nhắn theo Thứ tự Tăng/Giảm
Aspose.Email cung cấp ComparisonField.orderBy(boolean ascending) phương thức thiết lập giá trị cho biết client sử dụng sắp xếp tăng hoặc giảm trên trường tìm kiếm. Nó cho phép bạn sắp xếp email theo thứ tự tăng/giảm dựa trên tiêu chí được chỉ định bởi MailQueryBuilder.
Đoạn mã dưới đây minh họa cách lọc tin nhắn theo thứ tự tăng/giảm:
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());
Xây Dựng Truy Vấn Phức Tạp
Nếu khác MailQueryBuilder các thuộc tính được đặt trong một câu lệnh riêng, tất cả các điều kiện sẽ được khớp. Ví dụ, để lấy một tin trong một khoảng ngày cụ thể và từ một host nhất định, viết ba câu lệnh:
Kết Hợp Truy Vấn với AND
Đoạn mã sau cho bạn thấy cách Kết hợp Truy vấn với 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());
Kết Hợp Truy Vấn với OR
MailQueryBuilder cung cấp or() phương thức nhận hai MailQuery các thể hiện làm tham số. Nó lấy các tin nhắn khớp bất kỳ một trong hai điều kiện được chỉ định. Ví dụ dưới đây lọc tin nhắn có từ "test" trong tiêu đề hoặc "noreply@host.com" là người gửi. Đoạn mã sau cho bạn thấy cách kết hợp các truy vấn bằng OR.
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Lọc Email Phân Biệt Hoa Thường
Email có thể được lọc dựa trên việc phân biệt chữ hoa chữ thường bằng cách chỉ định cờ IgnoreCase trong tiêu chí lọc như trong đoạn mã sau.
// 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();
Lọc Tin nhắn với Hỗ trợ Phân trang
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();
}