Работа с элементами календаря в PST-файле
Добавление MapiCalendar в PST
В статье “Создание нового PST-файла и добавление подпапок” описано, как создать PST-файл и добавить в него подпапку. С помощью Aspose.Email вы можете добавить MapiCalendar в подкаталог Календара PST-файла, который вы создали или загрузили. Ниже приведены шаги для добавления MapiCalendar в PST:
- Создайте объект MapiCalendar.
- Установите свойства MapiCalendar с помощью конструктора и методов.
- Создайте PST с помощью метода PersonalStorage.create().
- Создайте предопределенную папку (Календарь) в корне PST-файла, получив доступ к корневой папке, а затем вызвав метод add_mapi_message_item().
Следующий код показывает, как создать MapiCalendar, а затем добавить его в папку календаря вновь созданного PST-файла.
For complete examples and data files, please go to https://github.com/aspose-email/aspose-email-python-dotnet | |
# Create the appointment | |
appointment = MapiCalendar( | |
"LAKE ARGYLE WA 6743", | |
"Appointment", | |
"This is a very important meeting :)", | |
dt.datetime(2018, 6, 1, 21, 30, 0), | |
dt.datetime(2018, 6, 1, 21, 50, 0)) | |
# Create the meeting | |
attendees = MapiRecipientCollection() | |
attendees.add("ReneeAJones@armyspy.com", "Renee A. Jones", MapiRecipientType.TO) | |
attendees.add("SzllsyLiza@dayrep.com", "Szollosy Liza", MapiRecipientType.TO) | |
meeting = MapiCalendar( | |
"Meeting Room 3 at Office Headquarters", | |
"Meeting", | |
"Please confirm your availability.", | |
dt.datetime(2018, 6, 1, 21, 30, 0), | |
dt.datetime(2018, 6, 1, 21, 50, 0), | |
"CharlieKhan@dayrep.com", | |
attendees | |
) | |
os.remove(dataDir + "AddMapiCalendarToPST_out.pst") | |
personalStorage = PersonalStorage.create(dataDir + "AddMapiCalendarToPST_out.pst", FileFormatVersion.UNICODE) | |
calFolder = personalStorage.create_predefined_folder("AsposeCalendar", StandardIpmFolder.APPOINTMENTS) | |
calFolder.add_mapi_message_item(appointment) | |
calFolder.add_mapi_message_item(meeting) | |
personalStorage.dispose() |
Сохранение элементов календаря из PST на диск в формате ICS
Данная статья показывает, как получить доступ к элементам календаря из PST-файла Outlook и сохранить календарь на диск в формате ICS. Используйте классы PersonalStorage и MapiCalendar для получения информации о календаре. Ниже приведены шаги для сохранения элементов календаря:
- Загрузите PST-файл в класс PersonalStorage.
- Просмотрите папку Календарь.
- Получите содержимое папки Календарь, чтобы получить коллекцию сообщений.
- Пройдитесь по коллекции сообщений.
- Вызовите метод PersonalStorage.extract_message(), чтобы получить контактную информацию в классе MapiCalendar.
- Вызовите метод MapiCalendar.save(), чтобы сохранить элемент календаря на диск в формате ICS.
Программа ниже загружает PST-файл с диска и сохраняет все элементы календаря в формате ICS. Файлы ICS затем могут использоваться в любой другой программе, которая может загрузить стандартный файл календаря ICS. Открытый в Microsoft Outlook, файл ICS выглядит как на скриншоте ниже.
![]() |
---|
Следующий код показывает, как экспортировать элементы календаря из PST Outlook в формат ICS. |
For complete examples and data files, please go to https://github.com/aspose-email/aspose-email-python-dotnet | |
personalStorage = PersonalStorage.from_file(dataDir + "AddMapiCalendarToPST_out.pst") | |
calFolder = personalStorage.get_predefined_folder(StandardIpmFolder.APPOINTMENTS) | |
print("Total items: " + str(calFolder.content_count)) | |
for messageInfo in calFolder.get_contents(): | |
calendar = personalStorage.extract_message(messageInfo).to_mapi_message_item() | |
print(calendar.subject) | |
calendar.save(dataDir + calendar.subject + "_out.ics") | |
personalStorage.dispose() |
Сохранение в формате 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)
Изменение/удаление вхождений из повторений
Исключения могут быть добавлены к существующим повторениям с использованием 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)
# добавление одного исключения
exception_info = MapiCalendarExceptionInfo()
exception_info.location = "Лондон"
exception_info.subject = "Тема"
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)
# каждая измененная копия также должна иметь запись в поле DeletedInstanceDates с оригинальной датой экземпляра.
pattern.deleted_instance_dates.append(exception_date)
# добавление одного удаленного экземпляра
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(
"Это местоположение",
"Это резюме",
"Это тест повторения",
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("Календарь", StandardIpmFolder.APPOINTMENTS)
calendar_folder.add_message(new_cal)