کار با آیتم‌های تقویم در فایل PST

اضافه کردن MapiCalendar به PST

«Create a New PST File and Add Subfolders» نشان داد چگونه یک فایل 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

این مقاله نشان می‌دهد چگونه به موارد تقویم از یک فایل 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)

ویرایش/حذف رخدادها از تکرارها

با استفاده از API 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)