Створення та організація PST‑файлів у Python

Створити новий PST‑файл та додати підпапки

Aspose.Email забезпечує можливість створювати файли Personal Storage Table (PST) з нуля та додавати до них підпапки. За допомогою PersonalStorage клас, ви можете керувати операціями, пов’язаними з PST‑файлами, які зберівають електронні листи, календарні події, контакти та інші дані.

Наведений нижче приклад коду демонструє, як створити новий файл сховища та додати до нього папку "Inbox":

  1. Використайте PersonalStorage.create метод для створення нового PST‑файлу у вказаній теці. Файл створюється за допомогою UNICODE формат для сумісності з сучасними застосунками.
  2. Отримайте доступ до кореневої папки PST‑файлу та додайте нову підпапку з назвою "Inbox" для організації електронних листів.

Перевірка відповідності класу контейнера

Aspose.Email for Python пропонує рішення, яке підвищує процес валідації під час створення папок у PST‑файлах. За допомогою властивості enforce_container_class_matching у FolderCreationOptions клас, ви можете забезпечити сувору відповідність класів контейнерів під час додавання нової папки до PST‑сховища. Ця функція допомагає підтримувати ієрархічну структуру в PST‑файлі, запобігаючи несумісностям класів контейнерів. Встановивши ‘EnforceContainerClassMatching’ у ’true’, буде викинуто виключення, якщо класи контейнерів батьківської та дочірньої папок не співпадають, забезпечуючи захист від неправильних структуру папок. За замовчуванням ця властивість має значення ‘false’, що дозволяє гнучкість у створенні папок, при цьому ви можете примусово застосувати сувору відповідність, коли це потрібно.

Наведений приклад коду демонструє використання властивості enforce_container_class_matching для контролю, чи повинно викидатись виключення при додаванні папок з невідповідними класами контейнерів:

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

Зміна класу контейнера папки

Іноді необхідно змінити клас папки. Типовий приклад – коли повідомлення різних типів (зустрічі, листи тощо) додаються в одну папку. У таких випадках клас папки треба змінити для всіх елементів, щоб вони відображалися правильно. Наведений фрагмент коду показує, як змінити клас контейнера папки в PST для цієї мети:

Додати повідомлення пакетно з підвищеною продуктивністю

Додавання масових повідомлень у PST‑файл замість індивідуального додавання може надати кілька переваг, особливо щодо ефективності та продуктивності: менше операцій вводу‑виводу, скорочений час виконання задачі, більш ефективне використання системних ресурсів тощо. Метод add_messages у FolderInfo клас використовується для перенесення колекції MAPI‑повідомлень, отриманих з вихідної папки, у папку призначення.

Додати повідомлення з іншого PST

Щоб перелічити та отримати всі MAPI‑повідомлення з вихідної папки PST‑файлу, використайте метод enumerate_mapi_messages() у FolderInfo клас. Потім додайте ці повідомлення у папку призначення іншого 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())

Додати повідомлення з каталогу

Щоб додати повідомлення з каталогу, після відкриття файлу та отримання посилання на конкретну папку у PST‑файлі, отримайте список імен файлів із каталогу, вказаного змінною "path", і створіть порожній список MSG, щоб завантажити кожен файл як MapiMessage. Додайте кожне завантажене повідомлення до msg_list. Наведений приклад коду демонструє процес додавання повідомлень з каталогу:

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