Gerenciar Pastas no Servidor IMAP em Python
Listar Pastas IMAP
Recuperar informações de pasta de um servidor IMAP é simples com Aspose.Email. Siga os passos abaixo para obter e trabalhar com os detalhes das pastas:
- Use o método list_folders() do Aspose.Email ImapClient classe. Este método retorna uma instância de ImapFolderInfoCollection, que contém detalhes sobre todas as pastas.
- Itere sobre o ImapFolderInfoCollection objeto para acessar informações sobre pastas individuais.
- Recuperar subpastas (opcional). O método list_folders() é sobrecarregado. Você pode passar o nome de uma pasta como parâmetro para obter uma coleção de subpastas da pasta especificada.
O trecho de código a seguir demonstra como recuperar informações de pasta de um servidor IMAP usando o método Aspose.Email:
Renomear e Excluir Pastas
Aspose.Email fornece métodos do ImapClient classe para gerenciar pastas em um servidor de e‑mail via IMAP:
- método delete_folder - remove permanentemente a pasta e todas as mensagens contidas nela.
- método rename_folder - altera o nome da pasta sem modificar o conteúdo interno.
O trecho de código abaixo mostra como excluir ou renomear pastas no servidor IMAP programaticamente:
# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")
Criar e Adicionar Mensagens a Pastas Específicas
Com a API Aspose.Email, você pode usar o MailMessage e ImapClient classes para adicionar uma nova mensagem a uma pasta. Primeiro, crie um MailMessage objeto especificando o assunto, remetente e destinatário. Em seguida, assine uma pasta e adicione a mensagem a ela. O trecho de código abaixo demonstra como adicionar uma nova mensagem a uma pasta:
- Inicialize o cliente IMAP usando o ImapClient classe para conectar ao seu servidor de e‑mail. Forneça o endereço do servidor, porta, nome de usuário e senha.
- Selecione a pasta de destino onde deseja adicionar a nova mensagem, como "Inbox", usando o método select_folder.
- Crie um novo e‑mail usando o MailMessage classe. Especifique o remetente, destinatário, assunto e conteúdo da mensagem.
- Assine a pasta usando o método subscribe_folder com o nome da pasta.
- Adicione a mensagem recém‑criada à pasta selecionada usando o método append_message, especificando o nome da pasta e o objeto da mensagem.
Mover Mensagens entre Pastas
Aspose.Email para .NET permite mover mensagens de uma pasta de caixa de correio para outra usando o ImapClient API. O método move_message usa o id exclusivo da mensagem e o nome da pasta de destino para mover uma mensagem para a pasta de destino. O trecho de código a seguir mostra como mover mensagens entre pastas:
Copiar Mensagens Entre Pastas
A API Aspose.Email permite copiar mensagens de uma pasta de caixa de correio para outra sem esforço. Você pode copiar uma única mensagem ou várias mensagens usando os métodos copy_message e copy_messages. O método copy_messages permite transferir múltiplas mensagens de uma pasta de origem para uma pasta de destino dentro da caixa de correio. Abaixo está um trecho de código demonstrando como copiar mensagens entre pastas:
Trabalhar com Pastas de Caixa de Correio de Uso Especial
Caixas de correio de uso especial são pastas pré-definidas em um sistema de e‑mail projetadas para lidar com tipos específicos de mensagens, como Enviados, Rascunhos, Spam, Lixeira e Arquivo. A biblioteca Aspose.Email simplifica o acesso a essas caixas associando atributos aos seus papéis e propósitos. Isso permite que os clientes descubram e exibam automaticamente essas pastas sem necessidade de intervenção do usuário.
O trecho de código a seguir demonstra como recuperar informações sobre as principais caixas de correio de uso especial (Inbox, Drafts, Junk, Sent e Trash) usando as propriedades do ImapMailBoxInfo classe e imprimir os detalhes:
import aspose.email as ae
client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)
mailboxInfo = client.mailbox_info
print(mailboxInfo.inbox)
print(mailboxInfo.draft_messages)
print(mailboxInfo.junk_messages)
print(mailboxInfo.sent_messages)
print(mailboxInfo.trash)
Acessar Pastas e Ler Mensagens Recursivamente
ImapClient usa o método recursivo para listar pastas e subpastas do servidor IMAP. Esse método também é usado para ler e salvar mensagens no disco local em formato MSG. Tanto pastas quanto mensagens são criadas e salvas na mesma estrutura hierárquica que aparece no servidor IMAP. Abaixo está um trecho de código demonstrando como recuperar pastas e mensagens recursivamente:
import aspose.email as ae
import os
# Recursive method to get messages from folders and sub-folders
def list_messages_in_folder(folder_info, root_folder, client):
# Create the folder on disk (same name as on the IMAP server)
current_folder = os.path.join(root_folder, folder_info.name)
os.makedirs(current_folder, exist_ok=True)
# Read the messages from the current folder, if it is selectable
if folder_info.selectable:
# Send a status command to get folder info
folder_info_status = client.get_folder_info(folder_info.name)
print(
f"{folder_info_status.name} folder selected. New messages: {folder_info_status.new_message_count}, "
f"Total messages: {folder_info_status.total_message_count}"
)
# Select the current folder and list messages
client.select_folder(folder_info.name)
msg_info_coll = client.list_messages()
print("Listing messages....")
for msg_info in msg_info_coll:
# Get subject and other properties of the message
print("Subject:", msg_info.subject)
print(
f"Read: {msg_info.is_read}, Recent: {msg_info.recent}, Answered: {msg_info.answered}"
)
# Get rid of characters like ? and :, which should not be included in a file name
# Save the message in MSG format
file_name = (
msg_info.subject.replace(":", " ").replace("?", " ")
+ "-"
+ str(msg_info.sequence_number)
+ ".msg"
)
msg = client.fetch_message(msg_info.sequence_number)
msg.save(
os.path.join(current_folder, file_name),
ae.SaveOptions.default_msg_unicode,
)
print("============================\n")
else:
print(f"{folder_info.name} is not selectable.")
try:
# If this folder has sub-folders, call this method recursively to get messages
folder_info_collection = client.list_folders(folder_info.name)
for subfolder_info in folder_info_collection:
list_messages_in_folder(subfolder_info, root_folder, client)
except Exception:
pass
client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)
try:
# The root folder (which will be created on disk) consists of host and username
root_folder = f"{client.host}-{client.username}"
# Create the root folder and list all the folders from the IMAP server
os.makedirs(root_folder, exist_ok=True)
folder_info_collection = client.list_folders()
for folder_info in folder_info_collection:
# Call the recursive method to read messages and get sub-folders
list_messages_in_folder(folder_info, root_folder, client)
except Exception as ex:
print("\n", ex)
print("\nDownloaded messages recursively from IMAP server.")
Usar MultiConnection para Operações de Pastas em Lote
Aspose.Email possibilita configurar o cliente para estabelecer múltiplas conexões simultâneas ao servidor IMAP. Isso não aumenta necessariamente o desempenho, mas é uma solução confiável para operações concorrentes. Isso é particularmente útil se o cliente precisar executar várias tarefas ao mesmo tempo, como buscar diferentes pastas de e‑mail, sincronizar grandes volumes de dados ou processar múltiplas mensagens simultaneamente.
O trecho de código abaixo mostra como estabelecer múltiplas conexões ao servidor IMAP ao enviar uma coleção de mensagens de e‑mail usando o método ‘append_messages’ do ImapClient classe:
import aspose.email as ae
client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
client.append_messages(messages)