Obtener y listar correos electrónicos del servidor IMAP

Listar mensajes del buzón

El método ’list_messages’ de la ImapClient la clase recupera una lista de todos los mensajes de la carpeta actualmente seleccionada (la "Bandeja de Entrada" en este caso). Esta lista contiene objetos de metadatos de mensajes, que típicamente incluyen información como IDs de mensaje, números de secuencia, UIDs y posiblemente datos resumidos como líneas de asunto o información del remitente.

El fragmento de código a continuación demuestra cómo recuperar los metadatos de los mensajes de la Bandeja de Entrada y mostrar el número total de mensajes que contiene:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")

messages = client.list_messages()
print(f"Total Messages: {len(messages)}")

Listar mensajes con soporte de paginación

En escenarios donde el servidor de correo contiene una gran cantidad de mensajes en el buzón, a menudo se desea listar o recuperar mensajes con soporte de paginación. Aspose.Email ImapClient la clase le permite recuperar mensajes del servidor con soporte de paginación.

Listar mensajes recursivamente

El protocolo IMAP permite el listado recursivo de mensajes de una carpeta del buzón. También posibilita listar mensajes de sus subcarpetas. El fragmento de código a continuación muestra cómo listar mensajes recursivamente:

Listar IDs de mensaje MIME

El ImapMessageInfo la clase ofrece una manera conveniente de acceder al MIME MessageId para identificar mensajes sin necesidad de extraer todo el contenido del mensaje. A continuación se muestra un fragmento de código que demonstra cómo listar MIME MessageId:

Listar mensajes con MultiConnection

El ImapClient la clase ofrece una propiedad use_multi_connection, que permite usar múltiples conexiones para operaciones con alta carga. Además, puede especificar el número de conexiones en modo multi-conexión usando la propiedad connections_quantity. El siguiente fragmento de código ilustra cómo utilizar el modo multi-conexión para listar mensajes:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE

message_info_col = client.list_messages(True)

Tenga en cuenta que el uso de este modo no necesariamente conlleva un aumento de rendimiento.

Recuperar mensajes por número de secuencia o ID único

La API de Aspose.Email le permite generar dos listas de mensajes, una que contiene los números de secuencia y otra que contiene los IDs únicos de todos los mensajes en la bandeja de entrada. Para obtener mensajes del servidor IMAP por sus identificadores, use el método fetch_messages de la ImapClient clase. El fragmento de código a continuación muestra cómo listar mensajes por identificadores:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

# List messages
message_info_col = client.list_messages()
print("ListMessages Count:", message_info_col.count)

# Get sequence numbers and unique IDs
sequence_number_ar = [mi.sequence_number for mi in message_info_col]
unique_id_ar = [mi.unique_id for mi in message_info_col]

# Fetch messages by sequence number
fetched_messages_by_snum = client.fetch_messages(sequence_number_ar)
print("FetchMessages-sequenceNumberAr Count:", len(fetched_messages_by_snum))

# Fetch messages by UID
fetched_messages_by_uid = client.fetch_messages(unique_id_ar)
print("FetchMessages-uniqueIdAr Count:", len(fetched_messages_by_uid))

Obtener mensajes en orden descendente

La tarea se logra definiendo la configuración de paginación para la recuperación de mensajes. Para este propósito, use la propiedad ascending_sorting de la PageSettings clase que forma parte del módulo del cliente IMAP. Establezca el atributo ascending_sorting en la PageSettings establecer el objeto a False. Esto indica que los mensajes deben ordenarse de forma descendente por defecto durante la recuperación. El siguiente fragmento de código muestra cómo obtener mensajes en orden descendente:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

page_settings = ae.clients.imap.PageSettings
page_settings.ascending_sorting = False
page_info = client.list_messages_by_page(5, page_settings)
messages = page_info.items

for message in messages:
    print(message.subject)

Obtener mensajes del servidor y guardarlos en disco

El ImapClient la clase puede obtener mensajes de un servidor IMAP y guardarlos en formato EML en un disco local. Los siguientes pasos son necesarios para guardar los mensajes en disco:

  1. Utilice el ImapClient clase con los parámetros necesarios (host, puerto, usuario, contraseña) para conectarse al servidor IMAP.
  2. Seleccione la carpeta deseada llamando al método select_folder (p.ej., "Inbox")
  3. Recupere mensajes iterando sobre ellos usando el método list_messages.
  4. Para guardar los mensajes, para cada mensaje, use el método save_message especificando el directorio y agregando el ID único al nombre del archivo para garantizar la unicidad.

El siguiente fragmento de código le muestra cómo obtener mensajes de correo de un servidor y guardarlos:

Guardar mensajes en formato MSG

Para guardar correos en formato MSG, llame al método fetch_message de la ImapClient clase. Devuelve el mensaje en una instancia de la MailMessage clase. Entonces se puede llamar al método MailMessage.save() para guardar el mensaje en formato MSG. El siguiente fragmento de código le muestra cómo guardar mensajes en formato MSG.

Recuperar parámetros extra del mensaje (Info resumida)

El fragmento de código a continuación demuestra cómo interactuar con un servidor de correo usando Aspose.Email ImapClient para enviar y manipular mensajes de correo. El código usa el UID del mensaje para obtener información resumida con parámetros extra ("X-GM-MSGID", "X-GM-THRID"). Información similar se obtiene usando el número de secuencia.

Obtener encabezado List-Unsubscribe

El encabezado "ListUnsubscribe" se incluye comúnmente en los encabezados de los mensajes de correo electrónico enviados por listas de distribución o sistemas de correo automatizados. Proporciona un enlace o dirección de correo que los destinatarios pueden usar para darse de baja de la lista o de los correos automatizados. Aspose.Email ofrece la propiedad ’list_unsubscribe’ del ImapMessageInfo clase para recuperar este encabezado. El fragmento de código a continuación demuestra el uso de la propiedad y puede usarse como parte de un sistema para automatizar el proceso de darse de baja de correos electrónicos no deseados:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

message_info_col = client.list_messages()

# Iterate through each message
for imap_message_info in message_info_col:
    print("ListUnsubscribe Header:", imap_message_info.list_unsubscribe)

Obtener información de identificación del mensaje

Al recuperar y procesar mensajes de correo, puede obtener los detalles de los mensajes usando sus números de secuencia.

Las siguientes características se usan para interactuar con un buzón IMAP:

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

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

msg_infos = client.list_messages("INBOX")

for msg_info in msg_infos:
    # fetch by sequence number
    msg = client.fetch_message(msg_info.sequence_number)

    # fetch by unique id
    msg = client.fetch_message(msg_info.unique_id)

Listar adjuntos de mensajes de correo IMAP

Para obtener información sobre los adjuntos, como nombre y tamaño, sin recuperar los datos del adjunto, use los siguientes recursos de la biblioteca:

El ejemplo de código a continuación muestra cómo listar los archivos adjuntos de cada mensaje de correo usando Aspose.Email ImapClient:

# List messages
message_info_col = client.list_messages()

# Iterate through each message
for message_info in message_info_col:
    print(f"Attachments for message with sequence number {message_info.sequence_number}:")

    # List attachments for the current message
    attachment_info_col = client.list_attachments(message_info.sequence_number)

    # Iterate through each attachment
    for attachment_info in attachment_info_col:
        print(f"Attachment: {attachment_info.name} (size: {attachment_info.size})")