Detectar nuevos mensajes de correo en servidor POP3

Con cuentas POP3 puede dejar los mensajes en el servidor al descargarlos y leerlos. Dejar los correos en el servidor significa que están disponibles para otras aplicaciones e individuos, por ejemplo, usuarios que acceden a su correo desde varios dispositivos. O puede que solo desee descargar los mensajes que cumplan ciertos criterios especiales, por ejemplo, mensajes con una línea de asunto particular. Para gestionar el correo, puede;

  • Lea todos los mensajes del servidor de correo POP3 usando Aspose.Email.
  • Descargue los mensajes a su base de datos local.

Los mensajes no se eliminan sino que permanecen en el servidor. La primera vez que se ejecuta, este proceso funciona bien. Todos los mensajes requeridos se descargan a la base de datos. Pero la segunda vez que se ejecuta, se descargan los mismos mensajes porque todavía están en el servidor de correo. Esto genera registros duplicados. Para resolver este problema, use el Pop3MessageInfo.UniqueID propiedad para comprobar si un mensaje ya ha sido descargado. El ID único del mensaje debe almacenarse en la base de datos: es la clave de búsqueda para detectar nuevos mensajes.

Detectar nuevos mensajes

Para identificar correos nuevos a partir de una lista de correos en un servidor POP3:

  1. Conéctese al servidor.
  2. Obtén una lista de correos.
  3. Conéctese a la base de datos.
  4. Obtén una lista de correos.
  5. Compara las listas.
  6. Guarda los correos nuevos en la base de datos.

El proceso es más rápido cuando usted:

  1. Obtener todos los IDs únicos de los mensajes en una tabla hash.
  2. Buscar en la tabla hash en lugar de la base de datos para cada mensaje de correo en un bucle for(…).

En lugar de consultar la base de datos para cada mensaje, lo que requiere muchas llamadas a la base de datos, este método solo requiere una llamada. El siguiente fragmento de código le muestra cómo detectar nuevos mensajes de correo en el servidor 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;
}