Detekce nových e‑mailových zpráv na POP3 serveru

S účty POP3 můžete při stahování a čtení ponechat zprávy na serveru. Ponechání e‑mailů na serveru znamená, že jsou dostupné pro jiné aplikace a osoby, například uživatele, kteří přistupují ke svému e‑mailu z více zařízení. Nebo můžete chtít stahovat pouze zprávy, které splňují určitá kritéria, například zprávy s konkrétním předmětem. Pro správu e‑mailů můžete;

  • Přečtěte všechny zprávy z POP3 poštovního serveru pomocí Aspose.Email.
  • Stáhněte zprávy do lokální databáze.

Zprávy nejsou smazány, ale zůstávají na serveru. Při prvním spuštění proces funguje správně – všechny požadované zprávy jsou staženy do databáze. Při druhém spuštění jsou staženy stejné zprávy, protože jsou stále na e‑mailovém serveru. To vede k duplicitním záznamům. Pro řešení tohoto problému použijte Pop3MessageInfo.UniqueID vlastnost pro kontrolu, zda byla zpráva již stažena. Jedinečný ID zprávy musí být uložen v databázi: slouží jako vyhledávací klíč pro detekci nových zpráv.

Detekce nových zpráv

Jak identifikovat nové e‑maily ze seznamu e‑mailů na POP3 serveru:

  1. Připojíte se k serveru.
  2. Získáte seznam e‑mailů.
  3. Připojíte se k databázi.
  4. Získáte seznam e‑mailů.
  5. Porovnáte seznamy.
  6. Uložíte nové e‑maily do databáze.

Proces je rychlejší, když:

  1. Načtěte všechny jedinečné ID zpráv do hash tabulky.
  2. Prohledávejte hash tabulku místo databáze pro každou e‑mailovou zprávu ve smyčce for(…).

Místo dotazování na databázi pro každou zprávu, což vyžaduje mnoho databázových volání, tato metoda vyžaduje jen jedno volání. Následující úryvek kódu ukazuje, jak detekovat nové e‑mailové zprávy na POP3 serveru.

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