Создание и организация PST‑файлов в Python
Создать новый PST‑файл и добавить подпапки
Aspose.Email предоставляет возможность создавать файлы Personal Storage Table (PST) с нуля и добавлять в них подпапки. С помощью PersonalStorage класс, позволяющий управлять операциями с PST‑файлами, в которых хранятся электронные сообщения, календарные события, контакты и другие данные.
Ниже приведён пример кода, показывающий, как создать новый файл хранилища и добавить в него папку "Inbox":
- Используйте PersonalStorage.create метод для создания нового PST‑файла в указанном каталоге. Файл создаётся с помощью
UNICODEформат для совместимости с современными приложениями. - Получить доступ к корневой папке 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
Дляenumerate and retrieve all the MAPI messages from the source folder of a PST file, use the enumerate_mapi_messages() method of the 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))