การตรวจจับข้อความอีเมลใหม่บนเซิร์ฟเวอร์ POP3

ด้วยบัญชี POP3 คุณสามารถทิ้งข้อความบนเซิร์ฟเวอร์ขณะดาวน์โหลดและอ่านข้อความ การทิ้งอีเมลบนเซิร์ฟเวอร์หมายความว่ามันสามารถเข้าถึงได้โดยแอปพลิเคชันและบุคคลอื่น ๆ เช่น ผู้ใช้ที่เข้าถึงอีเมลจากหลายอุปกรณ์ หรือคุณอาจต้องการดาวน์โหลดเฉพาะข้อความที่ตรงตามเกณฑ์พิเศษ เช่น ข้อความที่มีหัวข้อเฉพาะ เพื่อจัดการอีเมล คุณสามารถ;

  • อ่านข้อความทั้งหมดจากเซิร์ฟเวอร์เมล POP3 โดยใช้ Aspose.Email.
  • ดาวน์โหลดข้อความไปยังฐานข้อมูลในเครื่องของคุณ.

ข้อความจะไม่ถูกลบแต่ยังคงอยู่บนเซิร์ฟเวอร์ เมื่อรันครั้งแรก กระบวนการทำงานได้อย่างดี ข้อความที่ต้องการทั้งหมดจะถูกดาวน์โหลดไปยังฐานข้อมูล แต่เมื่อรันครั้งที่สองเดียวกันจะถูกดาวน์โหลดอีกเนื่องจากยังคงอยู่บนเซิร์ฟเวอร์อีเมล ส่งผลให้เกิดบันทึกซ้ำ เพื่อแก้ปัญหานี้ ให้ใช้ Pop3MessageInfo.UniqueID คุณสมบัติที่ใช้ตรวจสอบว่าข้อความได้ถูกดาวน์โหลดแล้วหรือยัง รหัสยูนิกของข้อความต้องถูกเก็บในฐานข้อมูล: เป็นคีย์การค้นหาเพื่อการตรวจจับข้อความใหม่

การตรวจจับข้อความใหม่

เพื่อระบุอีเมลใหม่จากรายการอีเมลบนเซิร์ฟเวอร์ POP3:

  1. เชื่อมต่อกับเซิร์ฟเวอร์.
  2. รับรายการอีเมล.
  3. เชื่อมต่อกับฐานข้อมูล.
  4. รับรายการอีเมล.
  5. เปรียบเทียบรายการ.
  6. บันทึกอีเมลใหม่ลงฐานข้อมูล.

กระบวนการเร็วขึ้นเมื่อคุณ:

  1. ดึงรหัสยูนิกทั้งหมดของข้อความเข้าสู่ตารางแฮช.
  2. ค้นหาตารางแฮชแทนฐานข้อมูลสำหรับแต่ละข้อความอีเมลในลูป for(…)

แทนที่จะสอบถามฐานข้อมูลสำหรับแต่ละข้อความซึ่งต้องทำหลายการเรียกฐานข้อมูล วิธีนี้ต้องการเพียงการเรียกหนึ่งครั้ง โค้ดตัวอย่างต่อไปนี้แสดงวิธีตรวจจับข้อความอีเมลใหม่บนเซิร์ฟเวอร์ 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;
}