Ordner auf IMAP‑Server in Python verwalten

IMAP‑Ordner auflisten

Das Abrufen von Ordnerinformationen von einem IMAP‑Server ist mit Aspose.Email einfach. Befolgen Sie die folgenden Schritte, um Ordnerdetails abzurufen und zu bearbeiten:

  1. Verwenden Sie die Methode list_folders() von Aspose.Email ImapClient Klasse. Diese Methode gibt eine Instanz von zurück ImapFolderInfoCollection, das Details zu allen Ordnern enthält.
  2. Durchlaufen Sie die ImapFolderInfoCollection Objekt, um Informationen zu einzelnen Ordnern zu erhalten.
  3. Unterordner abrufen (optional). Die Methode list_folders() ist überladen. Man kann einen Ordnernamen als Parameter übergeben, um eine Sammlung von Unterordnern für den angegebenen Ordner abzurufen.

Das folgende Code‑Snippet demonstriert, wie man Ordnerinformationen von einem IMAP‑Server mit der Aspose.Email‑Methode abruft:

Ordner umbenennen und löschen

Aspose.Email stellt Methoden des ImapClient Klasse zur Verwaltung von Ordnern auf einem E‑Mail‑Server via IMAP:

  • Methode delete_folder – löscht den Ordner und alle darin enthaltenen Nachrichten dauerhaft.
  • Methode rename_folder – ändert den Namen des Ordners, ohne dessen Inhalt zu verändern.

Das folgende Code‑Snippet zeigt, wie man Ordner auf dem IMAP‑Server programmgesteuert löscht oder umbenennt:

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

Nachrichten in bestimmten Ordnern erstellen und hinzufügen

Mit der Aspose.Email‑API können Sie das MailMessage und ImapClient Klassen, um eine neue Nachricht zu einem Ordner hinzuzufügen. Erstellen Sie zuerst ein MailMessage Objekt, indem Sie Betreff, Absender und Empfänger angeben. Anschließend abonnieren Sie einen Ordner und fügen die Nachricht hinzu. Das untenstehende Code‑Snippet zeigt, wie man eine neue Nachricht zu einem Ordner hinzufügt:

  1. Initialisieren Sie den IMAP‑Client mit dem ImapClient Klasse, um sich mit Ihrem E‑Mail‑Server zu verbinden. Geben Sie Serveradresse, Port, Benutzernamen und Passwort an.
  2. Wählen Sie den Zielordner, in den Sie die neue Nachricht hinzufügen möchten, z. B. „Inbox“, mit der Methode select_folder.
  3. Erstellen Sie eine neue E‑Mail mit dem MailMessage Klasse. Geben Sie Absender, Empfänger, Betreff und Nachrichteninhalt an.
  4. Abonnieren Sie den Ordner mit der Methode subscribe_folder und dem Ordnernamen.
  5. Fügen Sie die neu erstellte Nachricht mit der Methode append_message zum ausgewählten Ordner hinzu, wobei Sie den Ordnernamen und das Nachrichtenobjekt angeben.

Nachrichten zwischen Ordnern verschieben

Aspose.Email für .NET ermöglicht das Verschieben von Nachrichten von einem Postfachordner zu einem anderen mittels ImapClient API. Die Methode move_message verwendet die eindeutige ID der Nachricht und den Zielordnernamen, um eine Nachricht in den Zielordner zu verschieben. Das folgende Code‑Snippet zeigt, wie man Nachrichten zwischen Ordnern verschiebt:

Nachrichten zwischen Ordnern kopieren

Die Aspose.Email‑API ermöglicht das mühelose Kopieren von Nachrichten von einem Postfachordner zu einem anderen. Sie können eine einzelne Nachricht oder mehrere Nachrichten mit den Methoden copy_message und copy_messages kopieren. Die Methode copy_messages erlaubt das Übertragen mehrerer Nachrichten von einem Quellordner zu einem Zielordner innerhalb des Postfachs. Nachfolgend ein Code‑Snippet, das das Kopieren von Nachrichten zwischen Ordnern demonstriert:

Arbeiten mit Spezial‑Postfach‑Ordnern

Spezial‑Postfächer sind vordefinierte Ordner in einem E‑Mail‑System, die für die Verarbeitung bestimmter Nachrichtentypen wie Gesendet, Entwürfe, Spam, Papierkorb und Archiv konzipiert sind. Die Aspose.Email‑Bibliothek vereinfacht den Zugriff auf diese Postfächer, indem sie Attribute mit ihren Rollen und Zwecken verknüpft. Das ermöglicht Clients, diese Ordner automatisch zu entdecken und anzuzeigen, ohne dass Benutzer eingreifen müssen.

Das folgende Code‑Snippet demonstriert, wie man Informationen zu wichtigen Spezial‑Postfächern (Posteingang, Entwürfe, Spam, Gesendet und Papierkorb) mithilfe der Eigenschaften des ImapMailBoxInfo Klasse und die Details ausgeben:

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)

Ordner zugreifen und Nachrichten rekursiv lesen

ImapClient verwendet die rekursive Methode, um Ordner und Unterordner vom IMAP‑Server aufzulisten. Diese Methode wird ebenfalls zum Lesen und Speichern von Nachrichten im MSG‑Format auf die lokale Festplatte genutzt. Sowohl Ordner als auch Nachrichten werden in derselben hierarchischen Struktur wie auf dem IMAP‑Server erstellt und gespeichert. Nachfolgend ein Code‑Snippet, das das rekursive Abrufen von Ordnern und Nachrichten demonstriert:

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

MultiConnection für Stapel‑Ordner‑Operationen verwenden

Aspose.Email ermöglicht es, den Client so zu konfigurieren, dass mehrere gleichzeitige Verbindungen zum IMAP‑Server hergestellt werden. Das erhöht nicht zwingend die Leistung, stellt jedoch eine zuverlässige Lösung für parallele Vorgänge dar. Dies ist besonders nützlich, wenn der Client mehrere Aufgaben gleichzeitig ausführen muss, z. B. verschiedene E‑Mail‑Ordner abrufen, große Datenmengen synchronisieren oder mehrere Nachrichten gleichzeitig verarbeiten.

Das folgende Code‑Snippet zeigt, wie mehrere Verbindungen zum IMAP‑Server hergestellt werden, während eine Sammlung von E‑Mail‑Nachrichten mit der Methode ‘append_messages’ des ImapClient Klasse:

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)