Управление элементами календаря в файлах 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

В этой статье объясняется, как получить доступ к элементам календаря из PST‑файла Outlook и сохранить их на диск в формате 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 class позволяет сохранять оригинальные даты и времена элементов календаря при сохранении их в файл 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 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)