POP3 Sunucusunda Yeni E-posta Mesajlarını Algılama

POP3 hesaplarıyla, mesajları indirirken ve okurken sunucuda bırakabilirsiniz. Sunucuda e-postaları bırakmak, bunların diğer uygulamalar ve kişiler tarafından erişilebilir olacağı anlamına gelir; örneğin, e-postalarına birden fazla cihazdan erişen kullanıcılar. Ya da yalnızca belirli bir kritere uyan mesajları indirmek isteyebilirsiniz; örneğin, belirli bir konu satırına sahip mesajlar. E-postaları yönetmek için şunları yapabilirsiniz;

  • Aspose.Email kullanarak POP3 posta sunucusundaki tüm mesajları okuyun.
  • Mesajları yerel veri tabanınıza indirin.

Mesajlar silinmez, sunucuda kalır. İlk çalıştırmada süreç sorunsuz çalışır. Gerekli tüm mesajlar veri tabanına indirilir. Ancak ikinci çalıştırmada, mesajlar hâlâ e-posta sunucusunda olduğu için aynı mesajlar tekrar indirilir. Bu durum yinelenen kayıtlar oluşturur. Bu sorunu çözmek için, Pop3MessageInfo.UniqueID Bir mesajın zaten indirilip indirilmediğini kontrol eden özellik. Mesajın benzersiz kimliği veri tabanında saklanmalıdır; bu, yeni mesajları algılamak için arama anahtarıdır.

Yeni Mesajları Algılama

POP3 sunucusundaki e-posta listesinden yeni e-postaları belirlemek için:

  1. Sunucuya bağlan.
  2. E-posta listesi al.
  3. Veri tabanına bağlan.
  4. E-posta listesi al.
  5. Listeleri karşılaştır.
  6. Yeni e-postaları veri tabanına kaydet.

Aşağıdaki durumlarda süreç daha hızlı olur:

  1. Tüm mesajların benzersiz kimliklerini bir hash tablosuna çek.
  2. for(…) döngüsünde her e-posta mesajı için veri tabanı yerine hash tablosunda arama yap.

Her mesaj için veri tabanını sorgulamak ve çok sayıda veri tabanı çağrısı gerektirmek yerine, bu yöntem yalnızca bir çağrı gerektirir. Aşağıdaki kod örneği, POP3 sunucusunda yeni e-posta mesajlarını nasıl algılayacağınızı gösterir.

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;
}