Управление на календарни елементи в 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 за .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)