Python で PST ファイルを作成および整理する

新しい 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 ファイルにメッセージを追加することで、効率とパフォーマンスの面で多くの利点があります。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))