اكتشاف رسائل البريد الجديدة على خادم 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;
}