Lọc Tin Nhắn từ Hộp Thư Exchange bằng WebDav
Lọc Tin Nhắn bằng Web Dav
Để 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 ExchangeClient.listMessages(MailQuery query) và truyền MailQuery vào tham số để chỉ lấy các tin nhắn đã lọc.
Các ví dụ mã dưới đây cho thấy cách kết nối tới hộp thư Exchange và lấy tin nhắn có chuỗi "Newsletter" trong tiêu đề và được gửi hôm nay.
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.");
Lấy Tin Nhắn Đáp Ứng Tiêu Chí Cụ Thể
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.
Tiêu chí Lọc Ngày Hôm Nay
Đoạn mã dưới đây cho bạn thấy 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());
Tiêu chí Lọc Khoảng Thời Gian
Đ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.
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));
Tiêu chí Lọc 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ể.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Tiêu chí Lọc 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ể.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Tiêu chí Lọc 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ể.
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Tiêu chí Lọc 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 builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");
Tiêu chí Lọc 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
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());
Xây Dựng Truy Vấn Phức Tạp
Nếu các thuộc tính QueryBuilder khác nhau được thiết lập trong các câu lệnh riêng biệt, tất cả các điều kiện sẽ được khớp. Ví dụ, để lấy một tin nhắn trong một khoảng thời gian cụ thể và từ một máy chủ nhất định, viết ba câu lệnh:
Kết Hợp Truy Vấn với AND
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)));
Kết Hợp Truy Vấn với OR
QueryBuilder cung cấp phương thức or() nhận hai đối tượng MailQuery làm tham số. Nó lấy các tin nhắn phù hợp với bất kỳ một trong hai điều kiện đã chỉ định. Ví dụ dưới đây lọc các tin nhắn có từ "test" trong tiêu đề hoặc "noreply@host.com" là người gửi.
MailQueryBuilder builder = new MailQueryBuilder();
// Specify OR condition
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 phân biệt hoa thường bằng cách chỉ định cờ IgnoreCase trong tiêu chí lọc như ví dụ dưới đây.
//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();