在 Python 中创建和组织 PST 文件

创建新 PST 文件并添加子文件夹

Aspose.Email 提供从头创建个人存储表(PST)文件并向其添加子文件夹的功能。使用该 PersonalStorage 类,您可以管理与 PST 文件相关的操作,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 文件批量添加消息可以提供多项优势,尤其在效率和性能方面:减少 I/O 操作、缩短完成任务的时间、系统资源更高效利用等。该类的 add_messages 方法 FolderInfo 类用于将从源文件夹获取的 MAPI 消息集合转移到目标文件夹。

从另一个 PST 添加消息

要枚举并检索 PST 文件源文件夹中的所有 MAPI 消息,请使用该类的 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))