Nieuwe e‑mailberichten detecteren op POP3‑server

Met POP3‑accounts kun je berichten op de server laten staan bij het downloaden en lezen ervan. Het achter laten van e‑mails op de server betekent dat ze beschikbaar zijn voor andere applicaties en personen, bijvoorbeeld gebruikers die hun e‑mail vanaf verschillende apparaten benaderen. Of je wilt alleen berichten downloaden die aan een bepaalde voorwaarde voldoen, bijvoorbeeld berichten met een specifieke onderwerpregel. Om e‑mail te beheren, kun je;

  • Lees alle berichten van de POP3‑mailserver met Aspose.Email.
  • Download de berichten naar uw lokale database.

De berichten worden niet verwijderd maar blijven op de server staan. De eerste keer dat het wordt uitgevoerd, werkt dit proces goed. Alle benodigde berichten worden naar de database gedownload. Maar de tweede keer dat het wordt uitgevoerd, worden dezelfde berichten opnieuw gedownload omdat ze nog op de e‑mailserver staan. Dit veroorzaakt dubbele records. Om dit probleem op te lossen, gebruik de Pop3MessageInfo.UniqueID eigenschap om te controleren of een bericht al gedownload is. De unieke ID van het bericht moet in de database worden opgeslagen: dit is de zoek‑sleutel voor het detecteren van nieuwe berichten.

Nieuwe berichten detecteren

Om nieuwe e‑mails te identificeren uit een lijst van e‑mails op een POP3‑server:

  1. Verbinden met de server.
  2. Een lijst met e‑mails ophalen.
  3. Verbinden met de database.
  4. Een lijst met e‑mails ophalen.
  5. De lijsten vergelijken.
  6. Nieuwe e‑mails opslaan in de database.

Het proces is sneller wanneer je:

  1. Haal alle unieke IDs van berichten op in een hash‑tabel.
  2. Zoek in de hash‑tabel in plaats van in de database voor elk e‑mailbericht in een for(…)‑lus.

In plaats van de database voor elk bericht te raadplegen, wat veel database‑aanroepen vereist, heeft deze methode slechts één aanroep nodig. Het volgende codefragment toont hoe je nieuwe e‑mailberichten op de POP3‑server kunt detecteren.

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