Tạo và Tổ Chức Các Tệp PST bằng Python
Tạo Tệp PST Mới và Thêm Thư Mục Con
Aspose.Email cung cấp chức năng tạo các tệp Personal Storage Table (PST) từ đầu và thêm các thư mục con vào chúng. Với PersonalStorage lớp, bạn có thể quản lý các thao tác liên quan đến tệp PST, nơi lưu trữ email, sự kiện lịch, danh bạ và dữ liệu khác.
Mẫu mã sau đây minh họa cách tạo một tệp lưu trữ mới và thêm một thư mục "Inbox" vào đó:
- Sử dụng PersonalStorage.create phương thức để tạo một tệp PST mới với thư mục đã chỉ định. Tệp được tạo bằng cách sử dụng
UNICODEđịnh dạng để tương thích với các ứng dụng hiện đại. - Truy cập thư mục gốc của tệp PST và thêm một thư mục con mới có tên "Inbox" để tổ chức các email.
Kiểm Tra Khớp Lớp Container
Aspose.Email cho Python cung cấp một giải pháp cải thiện quá trình xác thực khi tạo thư mục trong tệp PST. Với thuộc tính enforce_container_class_matching của FolderCreationOptions lớp, bạn có thể đảm bảo việc khớp chặt chẽ các lớp container khi thêm một thư mục mới vào bộ lưu trữ PST. Tính năng này giúp duy trì cấu trúc tổ chức trong tệp PST bằng cách ngăn ngừa sự không khớp lớp container. Bằng cách đặt ‘EnforceContainerClassMatching’ thành ’true’, một ngoại lệ sẽ được ném nếu lớp container của thư mục cha và con không khớp, cung cấp bảo vệ chống lại cấu trúc thư mục không đúng. Hành vi mặc định của thuộc tính này là ‘false’, cho phép linh hoạt trong việc tạo thư mục đồng thời cho phép bạn thực thi việc khớp chặt chẽ lớp container khi cần.
Mẫu mã sau đây minh họa việc sử dụng thuộc tính enforce_container_class_matching để kiểm soát việc có nên ném ngoại lệ khi thêm thư mục có lớp container không khớp hay không:
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"))
Thay Đổi Lớp Container của Thư Mục
Đôi khi cần thay đổi lớp của một thư mục. Một ví dụ phổ biến là khi các tin nhắn thuộc các loại khác nhau (cuộc hẹn, tin nhắn, v.v.) được thêm vào cùng một thư mục. Trong những trường hợp này, lớp của thư mục cần được thay đổi cho tất cả các phần tử trong thư mục để hiển thị đúng. Đoạn mã dưới đây cho bạn thấy cách thay đổi lớp container của một thư mục trong PST cho mục đích này:
Thêm Tin nhắn Hàng Loạt với Hiệu Suất Cải Thiện
Thêm hàng loạt tin nhắn vào một tệp PST thay vì thêm chúng từng cái một có thể mang lại một số lợi ích, đặc biệt về hiệu quả và hiệu suất: ít thao tác I/O hơn, giảm thời gian hoàn thành nhiệm vụ, tài nguyên hệ thống được sử dụng hiệu quả hơn, v.v. Phương thức add_messages của FolderInfo lớp được sử dụng để chuyển tập hợp các tin nhắn MAPI thu được từ thư mục nguồn sang thư mục đích.
Thêm Tin nhắn từ PST Khác
Để liệt kê và lấy tất cả các tin nhắn MAPI từ thư mục nguồn của tệp PST, hãy sử dụng phương thức enumerate_mapi_messages() của FolderInfo lớp. Sau đó, thêm các tin nhắn này vào thư mục đích của một tệp PST khác.
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())
Thêm Tin nhắn từ Thư mục
Để thêm tin nhắn từ thư mục, sau khi tệp được mở và tham chiếu tới một thư mục cụ thể trong tệp PST được lấy, hãy lấy danh sách các tên tệp từ thư mục được chỉ định bởi biến "path" và tạo một danh sách MSG rỗng để tải mỗi tệp thành MapiMessage. Gắn mỗi tin nhắn đã tải vào msg_list. Mẫu mã dưới đây minh họa quy trình thêm tin nhắn từ thư mục:
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))