PST‑Dateien in Python erstellen und organisieren

Neue PST‑Datei erstellen und Unterordner hinzufügen

Aspose.Email bietet die Funktionalität, Personal Storage Table (PST)‑Dateien von Grund auf zu erstellen und Unterordner hinzuzufügen. Mit dem PersonalStorage Klasse, mit der Sie Vorgänge im Zusammenhang mit PST‑Dateien verwalten können, die E‑Mail‑Nachrichten, Kalenderereignisse, Kontakte und andere Daten speichern.

Das folgende Codebeispiel zeigt, wie eine neue Speicherdatei erstellt und ein "Inbox"‑Ordner hinzugefügt wird:

  1. Verwenden Sie die PersonalStorage.create Methode, um eine neue PST‑Datei im angegebenen Verzeichnis zu erzeugen. Die Datei wird erstellt mit dem UNICODE Format für die Kompatibilität mit modernen Anwendungen.
  2. Greifen Sie auf den Stammordner der PST‑Datei zu und fügen Sie einen neuen Unterordner mit dem Namen "Inbox" hinzu, um E‑Mail‑Nachrichten zu organisieren.

Überprüfung der Container‑Klassen‑Übereinstimmung

Aspose.Email für Python bietet eine Lösung, die den Validierungsprozess bei der Ordnererstellung in PST‑Dateien verbessert. Mit der enforce_container_class_matching-Eigenschaft des FolderCreationOptions Klasse, mit der Sie bei der Erstellung eines neuen Ordners im PST‑Speicher eine strikte Übereinstimmung der Container‑Klassen sicherstellen können. Diese Funktion hilft, die organisatorische Hierarchie innerhalb der PST‑Datei zu erhalten, indem sie Diskrepanzen bei Container‑Klassen verhindert. Durch Setzen von ‘EnforceContainerClassMatching’ auf ’true’ wird eine Ausnahme ausgelöst, wenn die Container‑Klassen des Eltern- und des Unterordners nicht übereinstimmen, was ein Schutzmechanismus gegen falsche Ordnerstrukturen darstellt. Das Standardverhalten dieser Eigenschaft ist ‘false’, was Flexibilität bei der Ordnererstellung ermöglicht, während Sie bei Bedarf eine strikte Übereinstimmung erzwingen können.

Das folgende Codebeispiel demonstriert die Verwendung der enforce_container_class_matching-Eigenschaft, um zu steuern, ob beim Hinzufügen von Ordnern mit nicht übereinstimmenden Container‑Klassen eine Ausnahme ausgelöst werden soll:

with PersonalStorage.create("storage.pst", FileFormatVersion.Unicode) as pst:
    contacts = pst.createpredefinedfolder("Contacts", StandardIpmFolder.Contacts)
    
    # An exception will not arise. EnforceContainerClassMatching is False by default.
    contacts.addsubfolder("Subfolder1", "IPF.Note")
    
    # An exception will occur as the container class of the subfolder being added (IPF.Note)
    # does not match the container class of the parent folder (IPF.Contact).
    contacts.addsubfolder("Subfolder3", FolderCreationOptions(enforcecontainerclassmatching=True, containerclass="IPF.Note"))

Ändern der Ordner‑Container‑Klasse

Manchmal ist es notwendig, die Ordnerklasse zu ändern. Ein gängiges Beispiel ist, wenn Nachrichten verschiedener Typen (Termine, Nachrichten usw.) in denselben Ordner eingefügt werden. In solchen Fällen muss die Ordnerklasse für alle Elemente im Ordner geändert werden, damit sie korrekt dargestellt werden. Das folgende Codebeispiel zeigt, wie die Container‑Klasse eines Ordners in einer PST‑Datei zu diesem Zweck geändert wird:

Nachrichten in Bulk mit verbesserter Leistung hinzufügen

Das Hinzufügen von Massen­nachrichten zu einer PST‑Datei im Gegensatz zum einzelnen Hinzufügen kann mehrere Vorteile bieten, insbesondere in Bezug auf Effizienz und Leistung: weniger I/O‑Operationen, verkürzte Bearbeitungszeit, Systemressourcen werden effizienter genutzt usw. Die add_messages-Methode der FolderInfo Klasse wird verwendet, um die Sammlung der aus dem Quellordner erhaltenen MAPI‑Nachrichten in den Zielordner zu übertragen.

Nachrichten aus anderer PST hinzufügen

Um alle MAPI‑Nachrichten aus dem Quellordner einer PST‑Datei aufzulisten und abzurufen, verwenden Sie die enumerate_mapi_messages()‑Methode des FolderInfo Klasse. Anschließend fügen Sie diese Nachrichten dem Zielordner einer anderen PST‑Datei hinzu.

import aspose.email as ae

src_pst = ae.storage.pst.PersonalStorage.from_file("source.pst", False)
dest_pst = ae.storage.pst.PersonalStorage.from_file("destination.pst")

# Get the folder by name
src_folder = src_pst.root_folder.get_sub_folder("SomeFolder")
dest_folder = dest_pst.root_folder.get_sub_folder("SomeFolder")

dest_folder.add_messages(src_folder.enumerate_mapi_messages())

Nachrichten aus Verzeichnis hinzufügen

Um Nachrichten aus einem Verzeichnis hinzuzufügen, öffnen Sie zunächst die Datei und erhalten die Referenz zu einem bestimmten Ordner innerhalb der PST‑Datei, rufen dann eine Liste von Dateinamen aus einem Verzeichnis ab, das durch die Variable "path" angegeben ist, und erstellen eine leere MSG‑Liste, um jede Datei als MapiMessage zu laden. Fügen Sie jede geladene Nachricht der msg_list hinzu. Das folgende Codebeispiel demonstriert den Vorgang, Nachrichten aus einem Verzeichnis hinzuzufügen:

import aspose.email as ae
import os

pst = ae.storage.pst.PersonalStorage.from_file("my.pst", False)

# Get the folder by name
folder = pst.root_folder.get_sub_folder("SomeFolder")

dirs = os.listdir("path")
msg_list = []

for file in dirs:
    msg = ae.mapi.MapiMessage.load(file)
    msg_list.append(msg)

folder.add_messages(iter(msg_list))