Trabajando con Mensajes del Servidor IMAP

Obtención de la información de identificación para mensajes recibidos de un buzón de correo

Al recuperar y procesar mensajes de correo electrónico, puedes obtener los detalles de esos mensajes utilizando sus números de secuencia. Las siguientes características se utilizan para interactuar con un buzón de correo IMAP:

  • Aspose.Email.MailboxInfo clase - Representa información de identificación sobre un mensaje en un buzón de correo.

    • Aspose.Email.MailboxInfo.SequenceNumber propiedad - El número de secuencia de un mensaje.

    • Aspose.Email.MailboxInfo.UniqueId propiedad - El ID único de un mensaje.

  • Aspose.Email.MailMessage.ItemId propiedad - Representa información de identificación sobre el mensaje en un buzón de correo.

El siguiente fragmento de código muestra cómo obtener información de identificación sobre los mensajes:

using (var client = new ImapClient(imapHost, port, emailAddress, password, securityOption))
{
    var msgs = client.ListMessages("INBOX").Take(5);
    var seqIds = msgs.Select(t => t.SequenceNumber);
    var msgsViaFetch = client.FetchMessages(seqIds);
    
    for (var i = 0; i < 5; i++)
    {
        var thisMsg = msgsViaFetch[i];
        Console.WriteLine($"Message ID:{seqIds.ElementAt(i)} SequenceNumber: {thisMsg.ItemId.SequenceNumber} Subject:{thisMsg.Subject}");
    }
}

Listado de IDs de Mensajes MIME desde el Servidor

ImapMessageInfo proporciona el MessageId MIME para la identificación de mensajes sin extraer el mensaje completo. El siguiente fragmento de código muestra cómo listar el mensaje MIMEId.

Listado de Mensajes desde el Servidor

Aspose.Email proporciona una variante sobrecargada de 2 miembros de ListMessages() para recuperar un número especificado de mensajes basado en una consulta. El siguiente fragmento de código muestra cómo listar mensajes.

Listado de Mensajes desde el Servidor Recursivamente

El protocolo IMAP soporta el listado de mensajes recursivamente desde una carpeta de buzón. Esto ayuda a listar mensajes de subcarpetas de una carpeta también. El siguiente fragmento de código muestra cómo listar mensajes recursivamente.

Listado de Mensajes con MultiConexión

ImapClient proporciona una propiedad UseMultiConnection que se puede usar para crear múltiples conexiones para operaciones pesadas. También puedes establecer el número de conexiones que se utilizarán durante el modo de multi-conexión usando ImapClient.ConnectionsQuantity. El siguiente fragmento de código demuestra el uso del modo de multi-conexión para listar mensajes y compara su rendimiento con el modo de conexión única.

Obtener Mensajes en orden descendente

Aspose.Email proporciona el método ImapClient.ListMessagesByPage que lista mensajes con soporte de paginación. Algunas sobrecargas de ImapClient.ListMessagesByPage aceptan PageSettings como parámetro. PageSettings proporciona una propiedad AscendingSorting que, cuando se establece en false, devuelve correos electrónicos en orden descendente.

El siguiente código de ejemplo demuestra el uso de la propiedad AscendingSorting de la PageSettings clase para cambiar el orden de los correos electrónicos.

Recuperar Mensajes del Servidor y Guardar en el disco

La clase ImapClient puede recuperar mensajes de un servidor IMAP y guardar los mensajes en formato EML en un disco local. Los siguientes pasos son necesarios para guardar los mensajes en el disco:

  1. Crear una instancia de la clase ImapClient.
  2. Especificar un nombre de host, puerto, nombre de usuario y contraseña en el constructor de ImapClient.
  3. Seleccionar la carpeta utilizando el método SelectFolder().
  4. Llamar al método ListMessages para obtener el objeto ImapMessageInfoCollection.
  5. Iterar a través de la colección ImapMessageInfoCollection, llamar al método SaveMessage() y proporcionar la ruta de salida y el nombre del archivo.

El siguiente fragmento de código muestra cómo recuperar mensajes de correo electrónico de un servidor y guardarlos.

Guardando Mensajes en Formato MSG

En el ejemplo anterior, los correos electrónicos se guardan en formato EML. Para guardar correos electrónicos en formato MSG, se debe llamar al método ImapClient.FetchMessage(). Devuelve el mensaje en una instancia de la clase MailMessage. Luego se puede llamar al método MailMessage.Save() para guardar el mensaje en MSG. El siguiente fragmento de código muestra cómo guardar mensajes en formato MSG.

Grupo de Recuperación de Mensajes

ImapClient proporciona un método FetchMessages que acepta una lista de números de secuencia o ID únicos y devuelve una lista de MailMessage. El siguiente fragmento de código demuestra el uso del método FetchMessages para recuperar mensajes por números de secuencia y ID únicos.

Listado de Mensajes con Soporte de Paginación

En escenarios donde el servidor de correo electrónico contiene una gran cantidad de mensajes en el buzón, a menudo se desea listar o recuperar los mensajes con soporte de paginación. La API Aspose.Email ImapClient te permite recuperar los mensajes del servidor con soporte de paginación.

Listado de los Adjuntos de Mensajes

Para obtener información sobre los adjuntos, como nombre y tamaño, sin recuperar los datos del adjunto, prueba las siguientes APIs:

  • Aspose.Email.Clients.Imap.ImapAttachmentInfo - Representa información sobre un adjunto.
  • Aspose.Email.Clients.Imap.ImapAttachmentInfoCollection - Representa una colección de la clase ImapAttachmentInfo.
  • Aspose.Email.Clients.Imap.ListAttachments(int sequenceNumber) - Obtiene información para cada adjunto en un mensaje.

El código de ejemplo con los pasos a continuación te mostrará cómo usar las APIs:

  1. Llama al método ListMessages() en el objeto imapClient. Este método devolverá una colección ImapMessageInfoCollection que contiene información sobre los mensajes en el buzón.

  2. Itera a través de cada mensaje en la messageInfoCollection utilizando un bucle foreach.

  3. Llama al método ListAttachments() en el objeto imapClient, pasando la propiedad SequenceNumber del objeto mensaje como parámetro. Este método devolverá una ImapAttachmentInfoCollection que contiene información sobre los adjuntos en el mensaje.

  4. Itera a través de cada adjunto en la attachmentInfoCollection utilizando un bucle foreach.

  5. Dentro del bucle interno, puedes acceder a la información sobre cada adjunto utilizando las propiedades del objeto attachmentInfo. En este ejemplo, el nombre y el tamaño de cada adjunto se registran en la consola utilizando Console.WriteLine().

    Console.WriteLine("Adjunto: {0} (tamaño: {1})", attachmentInfo.Name, attachmentInfo.Size);

var messageInfoCollection = imapClient.ListMessages();
    
foreach (var message in messageInfoCollection)
{
    var attachmentInfoCollection = imapClient.ListAttachments(message.SequenceNumber);

    foreach (var attachmentInfo in attachmentInfoCollection)
    {
        Console.WriteLine("Adjunto: {0} (tamaño: {1})", attachmentInfo.Name, attachmentInfo.Size);
    }
}

Obteniendo Carpetas y Leyendo Mensajes Recursivamente

En este artículo, se utilizan la mayoría de las características de ImapClient para crear una aplicación que liste todas las carpetas y subcarpetas recursivamente desde un servidor IMAP. También guarda los mensajes en cada carpeta y subcarpeta en formato MSG en un disco local. En el disco, las carpetas y los mensajes se crean y guardan en la misma estructura jerárquica que en el servidor IMAP. El siguiente fragmento de código muestra cómo obtener la información de los mensajes y subcarpetas de forma recursiva.

Recuperando Parámetros Adicionales como Información Resumida

Obteniendo Información de Encabezado List-Unsubscribe

El encabezado List-Unsubscribe contiene la URL para darse de baja de listas de correo electrónico, por ejemplo, publicidad, boletines, etc. Para obtener el encabezado List-Unsubscribe, utiliza la propiedad ListUnsubscribe de la clase ImapMessageInfo. El siguiente ejemplo muestra el uso de la propiedad ListUnsubscribe para obtener el encabezado List-Unsubscribe.