Създаване и организиране на PST файлове в Python

Създаване на нов PST файл и добавяне на подпапки

Aspose.Email предоставя функционалност за създаване на Personal Storage Table (PST) файлове от нулата и добавяне на подпапки към тях. С the PersonalStorage class, можете да управлявате операции, свързани с PST файлове, които съхраняват имейл съобщения, календарни събития, контакти и други данни.

Следният примерен код демонстрира как да се създаде нов файл за съхранение и да се добави папка "Inbox" към него:

  1. Използвайте PersonalStorage.create method за генериране на нов PST файл с указаната директория. Файлът се създава с помощта на the UNICODE формат за съвместимост с модерни приложения.
  2. Достъп до основната папка на PST файла и добавяне на нова подпапка с име "Inbox", за да се организират имейл съобщенията.

Проверка за съвпадение на класовете на контейнерите

Aspose.Email за Python предлага решение, което подобрява процеса на валидиране при създаване на папки в PST файлове. Съсо свойството enforce_container_class_matching на the FolderCreationOptions class, можете да осигурите стриктно съвпадане на класовете на контейнерите при добавяне на нова папка в 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 файл, вместо да се добавят поотделно, може да предложи няколко предимства, особено по отношение на ефективност и производителност: по-малко I/O операции, намалено време за изпълнение, системните ресурси се използват по-ефективно и тн. Методът add_messages на the FolderInfo class се използва за прехвърляне на колекцията от MAPI съобщения, получени от изходната папка, към целевата папка.

Добавяне на съобщения от друг PST

За изброяване и извличане на всички MAPI съобщения от изходната папка на PST файл, използвайте метода enumerate_mapi_messages() на the FolderInfo class. След това добавете тези съобщения в целевата папка на друг 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))