Робота з елементами календаря у 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. У Microsoft Outlook файл ICS виглядає так, як на скриншоті нижче.

|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 for .NET API. Наведений приклад коду ілюструє використання цієї функції.

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)