إنشاء وتنظيم ملفات PST باستخدام Python

إنشاء ملف PST جديد وإضافة مجلدات فرعية

يوفر Aspose.Email إمكانية إنشاء ملفات جدول التخزين الشخصي (PST) من الصفر وإضافة مجلدات فرعية إليها. مع PersonalStorage فئة، يمكنك من إدارة العمليات المتعلقة بملفات PST، التي تخزن رسائل البريد الإلكتروني، أحداث التقويم، جهات الاتصال، وغيرها من البيانات.

توضح عينة الشيفرة التالية كيفية إنشاء ملف تخزين جديد وإضافة مجلد "الوارد" إليه:

  1. استخدم الـ PersonalStorage.create طريقة لتوليد ملف PST جديد بالمجلد المحدد. يتم إنشاء الملف باستخدام UNICODE تنسيق لتوافق مع التطبيقات الحديثة.
  2. الوصول إلى المجلد الجذر لملف PST وإضافة مجلد فرعي جديد باسم "الوارد" لتنظيم رسائل البريد الإلكتروني.

التحقق من مطابقة فئة الحاوية

يقدم 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 بالمقارنة مع إضافتها فرديًا يمكن أن تقدم عدة مزايا، خاصة من حيث الكفاءة والأداء: عمليات إدخال/إخراج أقل، وقت إكمال المهمة أقل، استغلال موارد النظام بشكل أكثر فعالية، إلخ. طريقة add_messages الخاصة بـ FolderInfo فئة تُستخدم لنقل مجموعة رسائل MAPI المستخرجة من مجلد المصدر إلى مجلد الوجهة.

إضافة رسائل من PST آخر

لعدّ واسترجاع جميع رسائل 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))