Gestisci cartelle su server IMAP in Python

Elenca cartelle IMAP

Recuperare le informazioni della cartella da un server IMAP è semplice con Aspose.Email. Segui i passaggi seguenti per recuperare e lavorare con i dettagli della cartella:

  1. Usa il metodo list_folders() di Aspose.Email ImapClient classe. Questo metodo restituisce un’istanza di ImapFolderInfoCollection, che contiene dettagli su tutte le cartelle.
  2. Itera attraverso il ImapFolderInfoCollection oggetto per accedere alle informazioni sulle singole cartelle.
  3. Recupera le sottocartelle (opzionale). Il metodo list_folders() è sovraccaricato. È possibile passare il nome di una cartella come parametro per recuperare una collezione di sottocartelle per la cartella specificata.

Il seguente frammento di codice dimostra come recuperare le informazioni della cartella da un server IMAP utilizzando il metodo Aspose.Email:

Rinomina ed elimina cartelle

Aspose.Email fornisce metodi del ImapClient classe per gestire cartelle su un server email tramite IMAP:

  • Metodo delete_folder - rimuove definitivamente la cartella e tutti i messaggi in essa contenuti.
  • Metodo rename_folder - cambia il nome della cartella senza modificare il contenuto al suo interno.

Il frammento di codice sotto mostra come eliminare o rinominare le cartelle sul server IMAP in modo programmato:

# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")

Crea e aggiungi messaggi a cartelle specifiche

Con l’API Aspose.Email, puoi usare il MailMessage e ImapClient classi per aggiungere un nuovo messaggio a una cartella. Prima, crea un MailMessage oggetto specificando oggetto, mittente e destinatario. Poi, iscriviti a una cartella e aggiungi il messaggio ad essa. Il frammento di codice sotto dimostra come aggiungere un nuovo messaggio a una cartella:

  1. Inizializza il client IMAP usando il ImapClient classe per connettersi al tuo server email. Fornisci l’indirizzo del server, porta, nome utente e password.
  2. Seleziona la cartella di destinazione dove vuoi aggiungere il nuovo messaggio, ad esempio "Inbox", usando il metodo select_folder.
  3. Crea una nuova email usando il MailMessage classe. Specifica mittente, destinatario, oggetto e contenuto del messaggio.
  4. Iscriviti alla cartella usando il metodo subscribe_folder con il nome della cartella.
  5. Aggiungi il messaggio appena creato alla cartella selezionata usando il metodo append_message, specificando il nome della cartella e l’oggetto messaggio.

Spostare messaggi tra cartelle

Aspose.Email per .NET consente di spostare i messaggi da una cartella di casella di posta a un’altra usando il ImapClient API. Il metodo move_message usa l’ID unico del messaggio e il nome della cartella di destinazione per spostare un messaggio nella cartella di destinazione. Il frammento di codice seguente mostra come spostare i messaggi tra cartelle:

Copia messaggi tra cartelle

L’API Aspose.Email ti consente di copiare messaggi da una cartella di casella di posta a un’altra senza sforzo. Puoi copiare un singolo messaggio o più messaggi usando i metodi copy_message e copy_messages. Il metodo copy_messages ti permette di trasferire più messaggi da una cartella di origine a una cartella di destinazione all’interno della casella di posta. Di seguito è mostrato un frammento di codice che dimostra come copiare i messaggi tra cartelle:

Lavorare con le cartelle delle caselle di posta a uso speciale

Le caselle di posta a uso speciale sono cartelle predefinite in un sistema email progettate per gestire specifici tipi di messaggi, come Inviati, Bozze, Spam, Cestino e Archivio. La libreria Aspose.Email semplifica l’accesso a queste caselle associando attributi ai loro ruoli e scopi. Questo consente ai client di scoprire e visualizzare automaticamente queste cartelle senza richiedere alcun intervento dell’utente.

Il seguente frammento di codice dimostra come recuperare informazioni sulle caselle di posta speciali chiave (Inbox, Drafts, Junk, Sent e Trash) usando le proprietà di ImapMailBoxInfo classe e stampa i dettagli:

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)

Accedi a cartelle e leggi messaggi ricorsivamente

ImapClient utilizza il metodo ricorsivo per elencare cartelle e sottocartelle dal server IMAP. Questo metodo è anche usato per leggere e salvare messaggi sul disco locale in formato MSG. Sia le cartelle che i messaggi sono creati e salvati nella stessa struttura gerarchica con cui appaiono sul server IMAP. Di seguito è mostrato un frammento di codice che dimostra come recuperare cartelle e messaggi ricorsivamente:

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.")

Usa MultiConnection per operazioni batch su cartelle

Aspose.Email rende possibile configurare il client per stabilire più connessioni simultanee al server IMAP. Non aumenta necessariamente le prestazioni, ma è una soluzione affidabile per operazioni concorrenti. È particolarmente utile se il client deve eseguire più attività contemporaneamente, come prelevare diverse cartelle email, sincronizzare grandi quantità di dati o elaborare più messaggi simultaneamente.

Il frammento di codice sotto mostra come stabilire più connessioni al server IMAP mentre si carica una collezione di messaggi email usando il metodo ‘append_messages’ di 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)