Gérer les dossiers sur le serveur IMAP en Python

Lister les dossiers IMAP

La récupération des informations d’un dossier depuis un serveur IMAP est simple avec Aspose.Email. Suivez les étapes ci‑dessous pour récupérer et travailler avec les détails des dossiers :

  1. Utilisez la méthode list_folders() d’Aspose.Email ImapClient classe. Cette méthode renvoie une instance de ImapFolderInfoCollection, qui contient les détails de tous les dossiers.
  2. Parcourez le ImapFolderInfoCollection objet pour accéder aux informations sur les dossiers individuels.
  3. Récupérer les sous‑dossiers (optionnel). La méthode list_folders() est surchargée. Vous pouvez passer le nom d’un dossier en paramètre pour obtenir une collection de sous‑dossiers du dossier spécifié.

Le fragment de code suivant montre comment récupérer les informations d’un dossier depuis un serveur IMAP en utilisant la méthode Aspose.Email :

Renommer et supprimer des dossiers

Aspose.Email fournit les méthodes du ImapClient classe pour gérer les dossiers sur un serveur de messagerie via IMAP :

  • méthode delete_folder - supprime définitivement le dossier ainsi que tous les messages qu’il contient.
  • méthode rename_folder - change le nom du dossier sans modifier son contenu.

Le fragment de code ci‑dessus montre comment supprimer ou renommer des dossiers sur le serveur IMAP de façon programmatique :

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

Créer et ajouter des messages à des dossiers spécifiques

Avec l’API Aspose.Email, vous pouvez utiliser le MailMessage et ImapClient classes pour ajouter un nouveau message à un dossier. D’abord, créez un MailMessage objet en spécifiant l’objet, l’expéditeur et le destinataire. Ensuite, abonnez‑vous à un dossier et ajoutez le message. Le fragment de code ci‑dessous montre comment ajouter un nouveau message à un dossier :

  1. Initialisez le client IMAP en utilisant le ImapClient classe pour se connecter à votre serveur de messagerie. Fournissez l’adresse du serveur, le port, le nom d’utilisateur et le mot de passe.
  2. Sélectionnez le dossier cible où vous souhaitez ajouter le nouveau message, tel que "Inbox", en utilisant la méthode select_folder.
  3. Créez un nouvel e‑mail en utilisant le MailMessage classe. Spécifiez l’expéditeur, le destinataire, l’objet et le contenu du message.
  4. Abonnez‑vous au dossier en utilisant la méthode subscribe_folder avec le nom du dossier.
  5. Ajoutez le message nouvellement créé au dossier sélectionné en utilisant la méthode append_message, en spécifiant le nom du dossier et l’objet message.

Déplacer des messages entre dossiers

Aspose.Email pour .NET permet de déplacer des messages d’un dossier de boîte aux lettres à un autre en utilisant le ImapClient API. La méthode move_message utilise l’identifiant unique du message et le nom du dossier de destination pour déplacer un message vers ce dossier. Le fragment de code suivant montre comment déplacer des messages entre dossiers :

Copier des messages entre dossiers

L’API Aspose.Email vous permet de copier des messages d’un dossier de boîte aux lettres à un autre facilement. Vous pouvez copier un seul message ou plusieurs messages en utilisant les méthodes copy_message et copy_messages. La méthode copy_messages permet de transférer plusieurs messages d’un dossier source vers un dossier de destination dans la boîte aux lettres. Voici un fragment de code montrant comment copier des messages entre dossiers :

Travailler avec les dossiers de boîtes aux lettres à usage spécial

Les boîtes aux lettres à usage spécial sont des dossiers prédéfinis dans un système de messagerie conçus pour gérer des types spécifiques de messages, tels que Sent, Drafts, Junk, Trash et Archive. La bibliothèque Aspose.Email simplifie l’accès à ces boîtes en associant des attributs à leurs rôles et fonctions. Cela permet aux clients de découvrir et d’afficher automatiquement ces dossiers sans aucune intervention de l’utilisateur.

Le fragment de code suivant montre comment récupérer des informations sur les boîtes aux lettres à usage spécial clés (Inbox, Drafts, Junk, Sent et Trash) en utilisant les propriétés de la ImapMailBoxInfo classe et afficher les détails :

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)

Accéder aux dossiers et lire les messages de façon récursive

ImapClient utilise la méthode récursive pour lister les dossiers et sous‑dossiers depuis le serveur IMAP. Cette méthode est également utilisée pour lire et enregistrer les messages sur le disque local au format MSG. Les dossiers et les messages sont créés et sauvegardés dans la même structure hiérarchique qu’ils apparaissent sur le serveur IMAP. Voici un fragment de code montrant comment récupérer les dossiers et les messages de façon récursive :

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

Utiliser MultiConnection pour les opérations groupées sur les dossiers

Aspose.Email permet de configurer le client pour établir plusieurs connexions simultanées au serveur IMAP. Cela n’augmente pas forcément les performances, mais c’est une solution fiable pour les opérations concurrentes. Cela est particulièrement utile si le client doit exécuter plusieurs tâches en même temps, comme récupérer différents dossiers de messagerie, synchroniser de grandes quantités de données ou traiter plusieurs messages simultanément.

Le fragment de code ci‑dessus montre comment établir plusieurs connexions au serveur IMAP lors du téléchargement d’une collection de messages électroniques en utilisant la méthode ‘append_messages’ de la 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)