Керування елементами календаря у 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. Перейдіть до папки 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)

Змінити або видалити повторювані появи у PST‑файлах

Ви можете додати винятки до існуючих шаблонів повторення або видалити окремі появи у PST‑файлах, використовуючи 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)