Работа с элементами календаря в PST‑файле
Добавление MapiCalendar в PST
Создание нового PST‑файла и добавление подпапок демонстрирует, как создать PST‑файл и добавить к нему подпапку. С помощью Aspose.Email вы можете добавить MapiCalendar в подпапку Calendar PST‑файла, который вы создали или загрузили. Ниже приведены шаги по добавлению MapiCalendar в PST:
- Создайте объект MapiCalendar.
- Установите свойства MapiCalendar с помощью конструктора и методов.
- Создайте PST с помощью метода PersonalStorage.create().
- Создайте предопределённую папку (Calendar) в корне PST‑файла, получив доступ к корневой папке и вызвав метод add_mapi_message_item().
Следующий фрагмент кода показывает, как создать MapiCalendar и затем добавить его в папку календаря новосозданного PST‑файла.
Сохранение элементов календаря из PST на диск в формате ICS
Эта статья показывает, как получить элементы календаря из файла Outlook PST и сохранить календарь на диск в формате ICS. Для получения информации о календаре используйте классы PersonalStorage и MapiCalendar. Ниже представлены шаги по сохранению элементов календаря:
- Загрузите PST‑файл с помощью класса PersonalStorage.
- Просмотрите папку Calendar.
- Получите содержимое папки Calendar, чтобы получить коллекцию сообщений.
- Перебрать коллекцию сообщений.
- Вызовите метод PersonalStorage.extract_message(), чтобы получить контактную информацию в классе MapiCalendar.
- Вызовите метод MapiCalendar.save(), чтобы сохранить элемент календаря на диск в формате ICS.
Приведённая ниже программа загружает PST‑файл с диска и сохраняет все элементы календаря в формате ICS. Файлы ICS затем можно использовать в любой другой программе, способной открыть стандартный календарный файл ICS. При открытии в Microsoft Outlook файл ICS выглядит как на скриншоте ниже.
|
| | :- | Следующий фрагмент кода показывает, как экспортировать элементы календаря из 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)
Изменение/удаление повторений из серий
Исключения могут быть добавлены к существующим повторениям с помощью 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)