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ư:

  1. Kết nối tới máy chủ Exchange.
  2. Tạo một thể hiện của MailQuery và thiết lập các thuộc tính mong muốn.
  3. 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();