Detección de Nuevos Mensajes de Correo Electrónico en el Servidor POP3

Con cuentas POP3 puedes dejar mensajes en el servidor al descargarlos y leerlos. Dejar correos electrónicos 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 desees descargar solo mensajes que cumplan con ciertos criterios especiales, por ejemplo, mensajes con una línea de asunto particular. Para gestionar el correo electrónico, puedes;

  • Leer todos los mensajes del servidor de correo POP3 usando Aspose.Email.
  • Descargar los mensajes a tu 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 aún están en el servidor de correo. Esto causa registros duplicados. Para resolver este problema, utiliza la propiedad Pop3MessageInfo.UniqueID para verificar si un mensaje ya ha sido descargado. El ID único del mensaje debe ser almacenado en la base de datos: es la clave de búsqueda para detectar nuevos mensajes.

Detección de Nuevos Mensajes

Para identificar nuevos correos electrónicos de una lista de correos en un servidor POP3:

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

El proceso es más rápido cuando:

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

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 te muestra cómo detectar nuevos mensajes de correo electrónico en el servidor POP3.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
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();
foreach (Pop3MessageInfo msgInfo in msgList)
{
// Get the POP3 message's unique ID
string strUniqueID = msgInfo.UniqueId;
// 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)
{
Console.WriteLine(ex.Message);
}
}
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 bool 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;
}