Buscar e listar e‑mails de um servidor IMAP

Listar mensagens da caixa de correio

O método ’list_messages’ da ImapClient classe obtém uma lista de todas as mensagens da pasta atualmente selecionada (a "Inbox" neste caso). Essa lista contém objetos de metadados de mensagens, que tipicamente incluem informações como IDs de mensagem, números de sequência, UIDs e, possivelmente, dados resumidos como linhas de assunto ou informações do remetente.

O trecho de código abaixo demonstra como recuperar os metadados das mensagens da Caixa de Entrada e imprimir o número total de mensagens que ela contém:

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 mensagens com suporte a paginação

Em cenários onde o servidor de e‑mail contém um grande número de mensagens na caixa de correio, costuma‑se desejar listar ou recuperar mensagens com suporte a paginação. O Aspose.Email ImapClient classe permite recuperar mensagens do servidor com suporte a paginação.

Listar mensagens recursivamente

O protocolo IMAP permite a listagem recursiva de mensagens de uma pasta de caixa de correio. Também possibilita listar mensagens de suas subpastas. O trecho de código abaixo demonstra como listar mensagens recursivamente:

Listar IDs de mensagem MIME

O ImapMessageInfo classe oferece uma maneira conveniente de acessar o MIME MessageId para identificar mensagens sem a necessidade de extrair todo o conteúdo da mensagem. Abaixo está um trecho de código que demonstra como listar MIME MessageId:

Listar mensagens com MultiConnection

O ImapClient classe oferece a propriedade use_multi_connection, que habilita o uso de múltiplas conexões para operações com carga pesada. Além disso, você pode especificar o número de conexões no modo multi‑conexão usando a propriedade connections_quantity. O trecho de código a seguir ilustra como utilizar o modo multi‑conexão para listar mensagens:

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)

Observe que usar este modo não necessariamente levará a um aumento de desempenho.

Recuperar mensagens por número de sequência ou ID único

A API Aspose.Email permite gerar duas listas de mensagens, uma contendo os números de sequência e outra contendo os IDs únicos de todas as mensagens na caixa de entrada. Para buscar mensagens do servidor IMAP por seus identificadores, use o método fetch_messages da ImapClient classe. O trecho de código abaixo demonstra como listar mensagens 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))

Obter mensagens em ordem descendente

A tarefa é realizada definindo configurações de paginação para a recuperação de mensagens. Para isso, use a propriedade ascending_sorting da PageSettings classe que faz parte do módulo do cliente IMAP. Defina o atributo ascending_sorting na PageSettings objeto para False. Isso indica que as mensagens devem ser classificadas em ordem decrescente por padrão durante a recuperação. O trecho de código a seguir mostra como recuperar mensagens em ordem decrescente:

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)

Buscar mensagens do servidor e salvar no disco

O ImapClient classe pode buscar mensagens de um servidor IMAP e salvá‑las em formato EML em disco local. Os passos a seguir são necessários para salvar as mensagens no disco:

  1. Use o ImapClient classe com os parâmetros necessários (host, porta, nome de usuário, senha) para conectar ao servidor IMAP.
  2. Selecione a pasta desejada chamando o método select_folder (ex.: "Inbox")
  3. Recupere mensagens iterando sobre elas usando o método list_messages.
  4. Para salvar mensagens, para cada mensagem, use o método save_message especificando o diretório e acrescentando o ID único ao nome do arquivo para garantir unicidade.

O trecho de código a seguir mostra como buscar mensagens de e‑mail de um servidor e salvá‑las:

Salvar mensagens no formato MSG

Para salvar e‑mails em formato MSG, chame o método fetch_message da ImapClient classe. Retorna a mensagem em uma instância da MailMessage classe. O método MailMessage.save() pode então ser chamado para salvar a mensagem em MSG. O trecho de código a seguir mostra como salvar mensagens no formato MSG.

Recuperar parâmetros extra da mensagem (informações resumidas)

O trecho de código abaixo demonstra como interagir com um servidor de e‑mail usando o Aspose.Email ImapClient para enviar e manipular mensagens de e‑mail. O código usa o UID da mensagem para recuperar informações resumidas com parâmetros extras ("X-GM-MSGID", "X-GM-THRID"). Informações semelhantes são obtidas usando o número de sequência.

Obter Cabeçalho List-Unsubscribe

O cabeçalho "ListUnsubscribe" costuma ser incluído nos cabeçalhos de mensagens de e‑mail enviadas por listas de distribuição ou sistemas de e‑mail automatizados. Ele fornece um link ou endereço de e‑mail que os destinatários podem usar para cancelar a assinatura da lista ou dos e‑mails automatizados. Aspose.Email fornece a propriedade ’list_unsubscribe’ de ImapMessageInfo classe para recuperar este cabeçalho. O trecho de código abaixo demonstra o uso da propriedade e pode ser usado como parte de um sistema para automatizar o processo de cancelamento de assinatura de e‑mails indesejados:

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)

Obter Informação de Identificação da Mensagem

Ao recuperar e processar mensagens de e‑mail, você pode buscar os detalhes das mensagens usando seus números de sequência.

Os recursos a seguir são usados para interagir com uma caixa de correio IMAP:

O trecho de código abaixo mostra como obter informações de identificação sobre mensagens:

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 anexos de mensagens de e‑mail IMAP

Para obter informações sobre anexos, como nome e tamanho, sem buscar os dados do anexo, use os seguintes recursos da biblioteca:

O exemplo de código abaixo demonstra como listar anexos para cada mensagem de e‑mail usando o 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})")