تشخیص پیام‌های ایمیل جدید در سرور 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;
}