สร้างและจัดระเบียบไฟล์ PST ด้วย Python
สร้างไฟล์ PST ใหม่และเพิ่มโฟลเดอร์ย่อย
Aspose.Email มีฟังก์ชันในการสร้างไฟล์ Personal Storage Table (PST) ตั้งแต่ต้นและเพิ่มโฟลเดอร์ย่อยเข้าไปพร้อมกับ PersonalStorage คลาสนี้คุณสามารถจัดการการดำเนินการที่เกี่ยวข้องกับไฟล์ PST ซึ่งเก็บข้อความอีเมล, เหตุการณ์ในปฏิทิน, ผู้ติดต่อ และข้อมูลอื่นๆ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างไฟล์จัดเก็บใหม่และเพิ่มโฟลเดอร์ "Inbox" เข้าไปในไฟล์
- ใช้ PersonalStorage.create เมธอดเพื่อสร้างไฟล์ PST ใหม่ในไดเรกทอรีที่ระบุ ไฟล์จะถูกสร้างโดยใช้
UNICODEรูปแบบเพื่อความเข้ากันได้กับแอปพลิเคชันสมัยใหม่. - เข้าถึงโฟลเดอร์รากของไฟล์ PST และเพิ่มโฟลเดอร์ย่อยใหม่ชื่อ "Inbox" เพื่อจัดระเบียบข้อความอีเมล
การตรวจสอบการแมตช์คลาสคอนเทนเนอร์
Aspose.Email สำหรับ 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 อื่น
เพื่อทำการ enumerate และดึงข้อความ MAPI ทั้งหมดจากโฟลเดอร์ต้นทางของไฟล์ PST ให้ใช้เมธอด 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))