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

إضافة MapiCalendar إلى 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 جديد تم إنشاؤه.

حفظ عناصر التقويم من PST إلى القرص بصيغة ICS

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

  1. حمّل ملف PST باستخدام فئة PersonalStorage.
  2. تصفح مجلد Calendar.
  3. احصل على محتويات مجلد Calendar للحصول على مجموعة الرسائل.
  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)

تعديل/حذف حدوثات من التكرارات

يمكن إضافة استثناءات إلى التكرارات القائمة باستخدام 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)