إدارة عناصر التقويم في ملفات PST

إضافة أحداث التقويم إلى ملفات PST

إنشاء ملف PST جديد وإضافة مجلدات فرعية أظهر كيفية إنشاء ملف PST وإضافة مجلدات فرعية داخله. باستخدام Aspose.Email، يمكنك أيضًا إضافة MapiCalendar إلى المجلد الفرعي Calendar في ملف PST موجود أو تم إنشاؤه حديثًا. إليك الخطوات لإضافة MapiCalendar إلى ملف PST:

  1. إنشاء MapiCalendar الكائن.
  2. عيّن خصائص MapiCalendar باستخدام مُنشئ وطرق.
  3. إنشاء PST باستخدام الـ PersonalStorage.create() طريقة.
  4. أنشئ مجلدًا محددًا مسبقًا (Calendar) في الجذر الخاص بملف PST عن طريق الوصول إلى المجلد الجذر ثم استدعاء طريقة add_mapi_message_item().

يعرض مقطع الشيفرة التالي كيفية إنشاء MapiCalendar ثم إضافته إلى مجلد التقويم في ملف PST تم إنشاؤه حديثًا:

حفظ عناصر تقويم Outlook كملفات ICS

تشرح هذه المقالة كيفية الوصول إلى عناصر التقويم من ملف Outlook PST وحفظها على القرص بصيغة ICS. ستحتاج إلى استخدام PersonalStorage و MapiCalendar الفئات لاسترجاع بيانات التقويم. اتبع هذه الخطوات لحفظ عناصر التقويم:

  1. تحميل ملف PST باستخدام PersonalStorage فئة.
  2. الانتقال إلى مجلد التقويم.
  3. استرجاع مجموعة الرسائل من مجلد التقويم.
  4. تكرار عبر مجموعة الرسائل.
  5. استخدم الـ PersonalStorage.extract_message() طريقة للحصول على معلومات جهة الاتصال في MapiCalendar فئة.
  6. استخدم الـ MapiCalendar.save() طريقة لحفظ كل عنصر تقويم على القرص بصيغة ICS.

يقوم البرنامج أدناه بتحميل ملف PST من القرص وحفظ جميع عناصر التقويم بصيغة ICS. يمكن بعد ذلك استخدام ملفات ICS في أي برنامج آخر يدعم ملفات التقويم القياسية بصيغة ICS. عند فتح ملف ICS في Microsoft Outlook، يظهر كما هو موضح في الصورة أدناه.

todo:image_alt_text

يوضح مقطع الشيفرة التالي كيفية تصدير عناصر التقويم من Outlook PST إلى صيغة ICS:

حفظ ملفات ICS مع الطوابع الزمنية الأصلية

طريقة keep_original_date_time_stamp من الفئة MapiCalendarIcsSaveOptions الفئة تسمح بالحفاظ على الطوابع الزمنية الأصلية لعناصر التقويم عند حفظها كملف ICS (iCalendar). يوضح مثال الشيفرة التالي تنفيذ هذه الطريقة:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

calendar_folder = pst.get_predefined_folder(ae.storage.pst.StandardIpmFolder.APPOINTMENTS)

for msg_info in calendar_folder.enumerate_messages():
    cal = pst.extract_message(msg_info).to_mapi_message_item()

    save_options = ae.mapi.MapiCalendarIcsSaveOptions()
    save_options.keep_original_date_time_stamp = True

    if not (cal is None):
      cal.save("cal.ics", save_options)

تعديل أو حذف تكرارات المتكررة في ملفات PST

يمكنك إضافة استثناءات إلى نمط التكرار الحالي أو حذف تكرارات محددة في ملفات PST باستخدام Aspose.Email لواجهة .NET. يوضح مثال الشيفرة التالي كيفية إجراء هذه التعديلات:

from datetime import datetime, timedelta
from aspose.email.storage.pst import PersonalStorage, StandardIpmFolder, FileFormatVersion
from aspose.email.mapi import MapiCalendar, MapiCalendarEventRecurrence, \
    MapiCalendarDailyRecurrencePattern, MapiCalendarRecurrenceEndType, \
    MapiCalendarExceptionInfo, MapiCalendarRecurrencePatternType, \
    MapiRecipientCollection, MapiRecipientType

start_date = datetime.now().date()

recurrence = MapiCalendarEventRecurrence()
pattern = MapiCalendarDailyRecurrencePattern()
pattern.pattern_type = MapiCalendarRecurrencePatternType.DAY
pattern.period = 1
pattern.end_type = MapiCalendarRecurrenceEndType.NEVER_END
recurrence.recurrence_pattern = pattern

exception_date = start_date + timedelta(days=1)

# adding one exception
exception_info = MapiCalendarExceptionInfo()
exception_info.location = "London"
exception_info.subject = "Subj"
exception_info.original_start_date = exception_date
exception_info.start_date_time = exception_date
exception_info.end_date_time = exception_date + timedelta(hours=5)
pattern.exceptions.append(exception_info)
pattern.modified_instance_dates.append(exception_date)
# every modified instance also has to have an entry in the DeletedInstanceDates field with the original instance date.
pattern.deleted_instance_dates.append(exception_date)

# adding one deleted instance
pattern.deleted_instance_dates.append(exception_date + timedelta(days=2))

rec_coll = MapiRecipientCollection()
rec_coll.add("receiver@domain.com", "receiver", MapiRecipientType.TO)
new_cal = MapiCalendar(
    "This is Location",
    "This is Summary",
    "This is recurrence test",
    start_date,
    start_date + timedelta(hours=3),
    "organizer@domain.com",
    rec_coll
)
new_cal.recurrence = recurrence

with PersonalStorage.create("output.pst", FileFormatVersion.UNICODE) as pst:
    calendar_folder = pst.create_predefined_folder("Calendar", StandardIpmFolder.APPOINTMENTS)
    calendar_folder.add_message(new_cal)