Phát hiện Tin nhắn Email Mới trên Máy chủ POP3

Với tài khoản POP3, bạn có thể để lại các tin trên máy chủ khi tải xuống và đọc chúng. Việc để email trên máy chủ có nghĩa là chúng có sẵn cho các ứng dụng và cá nhân khác, ví dụ, người dùng truy cập email từ nhiều thiết bị. Hoặc bạn có thể muốn chỉ tải những tin đáp ứng tiêu chí đặc biệt, chẳng hạn như các tin có tiêu đề nhất định. Để quản lý email, bạn có thể;

  • Đọc tất cả các tin từ máy chủ thư POP3 bằng Aspose.Email.
  • Tải các tin vào cơ sở dữ liệu cục bộ của bạn.

Các tin không bị xóa mà vẫn ở trên máy chủ. Lần đầu chạy, quy trình này hoạt động tốt. Tất cả các tin cần thiết được tải xuống cơ sở dữ liệu. Nhưng lần thứ hai chạy, cùng các tin lại được tải vì chúng vẫn còn trên máy chủ email. Điều này gây ra bản ghi trùng lặp. Để giải quyết vấn đề này, sử dụng Pop3MessageInfo.UniqueID thuộc tính để kiểm tra xem một tin đã được tải xuống chưa. ID duy nhất của tin phải được lưu trong cơ sở dữ liệu: nó là khóa tìm kiếm để phát hiện tin mới.

Phát hiện Tin nhắn Mới

Để xác định email mới từ danh sách email trên máy chủ POP3:

  1. Kết nối tới máy chủ.
  2. Lấy danh sách email.
  3. Kết nối đến cơ sở dữ liệu.
  4. Lấy danh sách email.
  5. So sánh các danh sách.
  6. Lưu các email mới vào cơ sở dữ liệu.

Quá trình nhanh hơn khi bạn:

  1. Lấy tất cả ID duy nhất của các tin nhắn vào bảng băm.
  2. Tìm kiếm trong bảng băm thay vì cơ sở dữ liệu cho mỗi tin email trong vòng for(…)

Thay vì truy vấn cơ sở dữ liệu cho mỗi tin nhắn, đòi hỏi nhiều lần gọi cơ sở dữ liệu, phương pháp này chỉ cần một lần gọi. Đoạn mã dưới đây cho bạn thấy cách phát hiện các tin nhắn Email mới trên máy chủ POP3.

public static void run() {
    try {
        // Connect to the POP3 mail server and check messages.
        Pop3Client pop3Client = new Pop3Client("pop.domain.com", 993, "username", "password");

        // List all the messages
        Pop3MessageInfoCollection msgList = pop3Client.listMessages();
        for (Pop3MessageInfo msgInfo : msgList) {
            // Get the POP3 message's unique ID
            String strUniqueID = msgInfo.getUniqueId();

            // Search your local database or data store on the unique ID. If a match is found, that means it's already downloaded. Otherwise download and save it.
            if (searchPop3MsgInLocalDB(strUniqueID) == true) {
                // The message is already in the database. Nothing to do with this message. Go to next message.
            } else {
                // Save the message
                savePop3MsgInLocalDB(msgInfo);
            }
        }
    } catch (Exception ex) {
        System.err.println(ex);
    }

}

private static void savePop3MsgInLocalDB(Pop3MessageInfo msgInfo) {
    // Open the database connection according to your database. Use public properties (for example msgInfo.Subject) and store in database,
    // for example, " INSERT INTO POP3Mails (UniqueID, Subject) VALUES ('" + msgInfo.UniqueID + "' , '" + msgInfo.Subject + "') and Run the query to store in database.
}

private static boolean searchPop3MsgInLocalDB(String strUniqueID) {
    // Open the database connection according to your database. Use strUniqueID in the search query to find existing records,
    // for example, " SELECT COUNT(*) FROM POP3Mails WHERE UniqueID = '" + strUniqueID + "' Run the query, return true if count == 1. Return false if count == 0.
    return false;
}