Twórz i organizuj pliki PST w Pythonie

Utwórz nowy plik PST i dodaj podfoldery

Aspose.Email udostępnia funkcję tworzenia plików Personal Storage Table (PST) od podstaw i dodawania do nich podfolderów. Z PersonalStorage klasa, dzięki której możesz zarządzać operacjami związanymi z plikami PST, które przechowują wiadomości e‑mail, wydarzenia kalendarza, kontakty i inne dane.

Poniższy przykład kodu pokazuje, jak stworzyć nowy plik przechowywania i dodać do niego folder "Inbox":

  1. Użyj PersonalStorage.create metoda do wygenerowania nowego pliku PST w określonym katalogu. Plik jest tworzony przy użyciu UNICODE format dla zgodności z nowoczesnymi aplikacjami.
  2. Uzyskaj dostęp do folderu głównego pliku PST i dodaj nowy podfolder o nazwie "Inbox", aby uporządkować wiadomości e‑mail.

Sprawdzanie dopasowania klasy kontenera

Aspose.Email for Python oferuje rozwiązanie, które usprawnia proces walidacji podczas tworzenia folderów w plikach PST. Dzięki właściwości enforce_container_class_matching w FolderCreationOptions klasa, dzięki której możesz zapewnić ścisłe dopasowanie klas kontenerów przy dodawaniu nowego folderu do magazynu PST. Ta funkcja pomaga utrzymać hierarchię organizacyjną w pliku PST, zapobiegając niezgodnościom klas kontenerów. Ustawiając ‘EnforceContainerClassMatching’ na ’true’, zostanie zgłoszony wyjątek, jeśli klasy kontenerów folderów nadrzędnego i podrzędnego nie będą się zgadzać, co zapewnia ochronę przed nieprawidłowymi strukturami folderów. Domyślne zachowanie tej właściwości to ‘false’, co pozwala na elastyczność przy tworzeniu folderów, a jednocześnie umożliwia wymuszenie ścisłego dopasowania klas kontenerów w razie potrzeby.

Poniższy przykład kodu demonstruje użycie właściwości enforce_container_class_matching w celu określenia, czy ma być zgłaszany wyjątek przy dodawaniu folderów o niepasujących klasach kontenerów:

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

Zmiana klasy kontenera folderu

Czasami konieczne jest zmienienie klasy folderu. Powszechnym przykładem jest sytuacja, gdy do jednego folderu dodawane są wiadomości różnych typów (spotkania, wiadomości itp.). W takich przypadkach klasa folderu musi być zmieniona dla wszystkich elementów, aby prawidłowo się wyświetlały. Poniższy fragment kodu pokazuje, jak zmienić klasę kontenera folderu w PST w tym celu:

Dodaj wiadomości hurtowo z ulepszoną wydajnością

Dodawanie wiadomości hurtowo do pliku PST, w przeciwieństwie do dodawania ich pojedynczo, może przynieść kilka korzyści, szczególnie pod względem wydajności i efektywności: mniej operacji I/O, skrócony czas realizacji zadania, bardziej efektywne wykorzystanie zasobów systemowych itp. Metoda add_messages klasy FolderInfo klasa jest używana do przeniesienia kolekcji wiadomości MAPI uzyskanych z folderu źródłowego do folderu docelowego.

Dodaj wiadomości z innego PST

Aby wyliczyć i pobrać wszystkie wiadomości MAPI z folderu źródłowego pliku PST, użyj metody enumerate_mapi_messages() klasy FolderInfo klasa. Następnie dodaj te wiadomości do folderu docelowego innego pliku PST.

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())

Dodaj wiadomości z katalogu

Aby dodać wiadomości z katalogu, po otwarciu pliku i uzyskaniu odwołania do określonego folderu w pliku PST, pobierz listę nazw plików z katalogu określonego zmienną "path" i utwórz pustą listę MSG, aby wczytać każdy plik jako MapiMessage. Dodaj każdą wczytaną wiadomość do msg_list. Poniższy przykład kodu demonstruje proces dodawania wiadomości z katalogu:

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