Lọc Email IMAP - Phương Pháp, Tiêu Chí & Ví Dụ Mã

Lọc Tin Nhắn Cơ Bản

Cái ImapClient class cung cấp ListMessages() phương thức lấy tất cả các tin nhắn từ một hộp thư. Để chỉ lấy các tin nhắn phù hợp với một số điều kiện, sử dụng phiên bản quá tải của ListMessages() phương thức nhận MailQuery được truyền làm đối số. Các MailQuery lớp cung cấp nhiều thuộc tính để xác định các điều kiện, chẳng hạn như ngày, tiêu đề, người gửi, người nhận v.v. Ví dụ đầu tiên minh họa cách lọc tin nhắn dựa trên ngày và tiêu đề. Chúng tôi cũng cho thấy cách lọc theo các tiêu chí khác và cách xây dựng các truy vấn phức tạp hơn. API cũng cung cấp khả năng áp dụng tiêu chí tìm kiếm phân biệt hoa thường để khớp chính xác tiêu chí lọc. API cũng cho phép chỉ định mã hoá chuỗi tìm kiếm để lọc tin nhắn từ hộp thư.

Lọc tin nhắn từ hộp thư

  1. Kết nối và đăng nhập vào máy chủ IMAP
  2. Tạo một đối tượng của MailQuery và đặt các thuộc tính
  3. Gọi ImapClient.ListMessages(MailQuery query) phương thức và truyền vào MailQuery với các tham số để chỉ nhận các tin nhắn đã lọc.

Đoạn mã sau cho bạn thấy cách kết nối tới hộp thư IMAP và nhận các tin nhắn đến hôm nay và có từ "newsletter" trong tiêu đề.

Lọc Tin Nhắn Theo Tiêu Chí Cụ Thể

Các mẫu mã ở trên lọc tin nhắn dựa trên tiêu đề email và ngày. Chúng ta cũng có thể sử dụng các thuộc tính khác để đặt các điều kiện hỗ trợ khác. Dưới đây là một số ví dụ về việc thiết lập các điều kiện bằng cách sử dụng MailQuery. Các đoạn mã sau đây cho thấy cách lọc email trên:

  1. Ngày hôm nay.
  2. Một khoảng thời gian.
  3. Từ người gửi cụ thể.
  4. Từ miền cụ thể.
  5. Từ người nhận cụ thể.

Ngày hôm nay

Đoạn mã sau cho bạn thấy cách lọc email dựa trên Ngày hôm nay.

Khoảng ngày

Đoạn mã sau cho bạn thấy cách lọc email theo khoảng thời gian.

Người gửi cụ thể

Đoạn mã sau cho bạn thấy cách lọc email dựa trên người gửi cụ thể.

Miền cụ thể

Đoạn mã sau cho bạn thấy cách lọc email dựa trên miền cụ thể.

Người nhận cụ thể

Đoạn mã sau cho bạn thấy cách lọc email dựa trên người nhận cụ thể.

Xây Dựng Truy Vấn Nâng Cao

Nếu khác MailQueryBuilder các thuộc tính được đặt trong các câu lệnh riêng biệt, sau đó mọi điều kiện sẽ được khớp. Ví dụ, nếu chúng ta muốn lấy tin nhắn trong một khoảng thời gian và từ một máy chủ cụ thể, chúng ta cần 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 các truy vấn bằng AND.

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 như tham số. Nó nhận các tin nhắn phù hợp với bất kỳ một trong hai điều kiện được chỉ định. Đoạn mã dưới đây cho thấy cách lọc tin nhắn mà có “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.

Lọc Dựa Trên InternalDate

Tin nhắn có thể được trích xuất từ máy chủ dựa trên InternalDate tuy nhiên đôi khi máy chủ không trả về tất cả tin nhắn như hiển thị trong hộp đến. Nguyên nhân có thể là múi giờ của máy chủ vì nó có thể không phải UTC cho mọi máy chủ như Gmail. Aspose gửi các lệnh như 008 SEARCH ON 4-May-2014 theo giao thức IMAP tuy nhiên kết quả có thể khác nhau do cài đặt múi giờ của máy chủ. Một thành viên mới đã được thêm vào ImapMessageInfo như InternalDate điều này hỗ trợ hơn trong việc lọc tin nhắn. Đoạn mã sau cho thấy cách sử dụng của InternalDate để lọc tin nhắn.

Lọc Phân Biệt Hoa Thường

Đoạn mã sau cho bạn thấy cách sử dụng lọc email phân biệt chữ hoa chữ thường.

Chỉ định Encoding cho Query Builder

API của ImapQueryBuilder bộ khởi tạo có thể được dùng để chỉ định Encoding cho chuỗi tìm kiếm. Điều này cũng có thể được đặt bằng cách sử dụng DefaultEncoding thuộc tính của MailQueryBuilder. Đoạn mã sau cho bạn thấy cách chỉ định mã hoá cho bộ xây dựng truy vấn.

Tùy Chọn Lọc Tùy Chỉnh

Lọc tin nhắn với Cờ Tùy chỉnh

Tìm Kiếm Tùy Chỉnh Để Lọc

Ví dụ, tiêu chuẩn RFC 3501 không cho phép tìm kiếm tin nhắn dựa trên việc có đính kèm trong tin nhắn. Nhưng Gmail cung cấp Các mở rộng IMAP cho phép thực hiện tìm kiếm như vậy. Đoạn mã tiếp theo cho thấy cách tạo một truy vấn tương ứng.

ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.CustomSearch("X-GM-RAW \"has:attachment\"");

MailQuery mailQuery = queryBuilder.GetQuery();
ImapMessageInfoCollection messageInfoCollection = imapClient.ListMessages(mailQuery);

Lọc tin nhắn với Hỗ trợ Phân trang

Cái ImapClient cung cấp khả năng tìm kiếm tin nhắn từ hộp thư và liệt kê chúng với hỗ trợ phân trang. Đoạn mã sau cho bạn thấy cách lọc tin nhắn với hỗ trợ phân trang.