สร้างและจัดระเบียบไฟล์ PST ด้วย Python

สร้างไฟล์ PST ใหม่และเพิ่มโฟลเดอร์ย่อย

Aspose.Email มีฟังก์ชันในการสร้างไฟล์ Personal Storage Table (PST) ตั้งแต่ต้นและเพิ่มโฟลเดอร์ย่อยเข้าไปพร้อมกับ PersonalStorage คลาสนี้คุณสามารถจัดการการดำเนินการที่เกี่ยวข้องกับไฟล์ PST ซึ่งเก็บข้อความอีเมล, เหตุการณ์ในปฏิทิน, ผู้ติดต่อ และข้อมูลอื่นๆ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างไฟล์จัดเก็บใหม่และเพิ่มโฟลเดอร์ "Inbox" เข้าไปในไฟล์

  1. ใช้ PersonalStorage.create เมธอดเพื่อสร้างไฟล์ PST ใหม่ในไดเรกทอรีที่ระบุ ไฟล์จะถูกสร้างโดยใช้ UNICODE รูปแบบเพื่อความเข้ากันได้กับแอปพลิเคชันสมัยใหม่.
  2. เข้าถึงโฟลเดอร์รากของไฟล์ 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))