Работа с элементами календаря в файле PST

Добавление MapiCalendar в PST

Создание нового PST, добавление подкаталогов и сообщений показало, как создать файл PST и добавить к нему подкаталог. С помощью Aspose.Email вы можете добавить MapiCalendar в подкаталог Календаря файла PST, который вы создали или загрузили.

Ниже приведены шаги для добавления MapiCalendar в PST:

  1. Создайте объект MapiCalendar.
  2. Установите свойства MapiCalendar с помощью конструктора и методов.
  3. Создайте PST с помощью метода PersonalStorage.create().
  4. Создайте предопределенную папку (Календарь) в корне файла PST, получив доступ к корневой папке и затем вызвав метод addMapiMessageItem().

Ниже приведен фрагмент кода, который показывает, как создать MapiCalendar и затем добавить его в папку Календаря только что созданного файла PST.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2016);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
Date startDate = cal.getTime();
cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2016);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
Date endDate = cal.getTime();
// Create the appointment
MapiCalendar appointment = new MapiCalendar("LAKE ARGYLE WA 6743", "Appointment", "This is a very important meeting.", startDate, endDate);
// Create the meeting
MapiRecipientCollection attendees = new MapiRecipientCollection();
attendees.add("ReneeAJones@armyspy.com", "Renee A. Jones", MapiRecipientType.MAPI_TO);
attendees.add("SzllsyLiza@dayrep.com", "Szollosy Liza", MapiRecipientType.MAPI_TO);
MapiCalendar meeting = new MapiCalendar("Meeting Room 3 at Office Headquarters", "Meeting", "Please confirm your availability.", startDate,
endDate, "CharlieKhan@dayrep.com", attendees);
PersonalStorage pst = PersonalStorage.create(dataDir + "MapiCalendarToPST_out.pst", FileFormatVersion.Unicode);
FolderInfo calendarFolder = pst.createPredefinedFolder("Calendar", StandardIpmFolder.Appointments);
calendarFolder.addMapiMessageItem(appointment);
calendarFolder.addMapiMessageItem(meeting);

Сохранение элементов календаря из Outlook PST на диск в формате ICS

Эта статья показывает, как получить доступ к элементам календаря из файла Outlook PST и сохранить календарь на диск в формате ICS. Она использует классы PersonalStorage и MapiCalendar для получения информации о календаре.

Ниже приведены шаги для сохранения элементов календаря:

  1. Загрузите файл PST в классе PersonalStorage.
  2. Просмотрите папку Календаря.
  3. Получите содержимое папки Календаря, чтобы получить коллекцию сообщений.
  4. Пройдите по коллекции сообщений.
  5. Вызовите метод PersonalStorage.extractMessage() для получения информации о контакте в классе MapiCalendar.
  6. Вызовите метод MapiCalendar.save() для сохранения элемента календаря на диск в формате ICS.

В приведенной ниже программе загружается файл PST с диска и сохраняются все элементы календаря в формате ICS. Файлы ICS затем могут быть использованы в любой другой программе, которая может загружать стандартный файл календаря ICS. Если вы откроете любой файл ICS в Microsoft Outlook, он будет выглядеть как на приведенном ниже скриншоте.

todo:image_alt_text
Рисунок: Элемент календаря, сохраненный с помощью Aspose.Email
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Load the Outlook PST file
PersonalStorage pst = PersonalStorage.fromFile(dataDir + "Outlook.pst");
// Get the Calendar folder
FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Calendar");
// Loop through all the calendar items in this folder
MessageInfoCollection messageInfoCollection = folderInfo.getContents();
for (MessageInfo messageInfo : messageInfoCollection) {
// Get the calendar information
MapiCalendar calendar = (MapiCalendar) pst.extractMessage(messageInfo).toMapiMessageItem();
// Display some contents on screen
System.out.println("Name: " + calendar.getSubject());
// Save to disk in ICS format
calendar.save("Calendar: " + calendar.getSubject() + ".ics", AppointmentSaveFormat.Ics);
}

Извлечение элементов календаря из файла PST

Класс MapiCalendar представляет элемент календаря в формате MAPI Microsoft Outlook. Извлеките сообщение из файла PST и преобразуйте его в элемент сообщения MAPI. Приведенный ниже код извлекает элемент календаря из файла PST и преобразует его в объект MapiCalendar для дальнейшей манипуляции или обработки:

MapiCalendar cal = (MapiCalendar) pst.extractMessage(messageInfo).toMapiMessageItem();

Сохранение элементов календаря в формате ICS с оригинальным временным штампом

Используйте приведенный выше фрагмент кода для извлечения элемента календаря из файла PST, а затем укажите дополнительные параметры для сохранения его как ICS с оригинальным временным штампом, используя метод setKeepOriginalDateTimeStamp класса MapiCalendarIcsSaveOptions:

MapiCalendar cal = (MapiCalendar) pst.extractMessage(messageInfo).toMapiMessageItem();

if (cal != null) {
    MapiCalendarIcsSaveOptions so = new MapiCalendarIcsSaveOptions();
    so.setKeepOriginalDateTimeStamp(true);
    cal.save("cal.ics", so);
}

Изменение/удаление вхождений из повторений

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Date startDate = addHours(new Date(), 12);
MapiCalendarEventRecurrence recurrence = new MapiCalendarEventRecurrence();
recurrence.setRecurrencePattern(new MapiCalendarDailyRecurrencePattern());
MapiCalendarRecurrencePattern pattern = recurrence.getRecurrencePattern();
pattern.setPatternType(MapiCalendarRecurrencePatternType.Day);
pattern.setPeriod(1);
pattern.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);
Date exceptionDate = addDays(startDate, 1);
// adding one exception
MapiCalendarExceptionInfo exceptionInfo = new MapiCalendarExceptionInfo();
exceptionInfo.setLocation("London");
exceptionInfo.setSubject("Subj");
exceptionInfo.setOriginalStartDate(exceptionDate);
exceptionInfo.setStartDateTime(exceptionDate);
exceptionInfo.setEndDateTime(addHours(exceptionDate, 5));
pattern.getExceptions().addItem(exceptionInfo);
pattern.getModifiedInstanceDates().addItem(exceptionDate);
// every modified instance also has to have an entry in the DeletedInstanceDates field with the original instance date.
pattern.getDeletedInstanceDates().addItem(exceptionDate);
// adding one deleted instance
pattern.getDeletedInstanceDates().addItem(addHours(exceptionDate, 2));
MapiRecipientCollection recColl = new MapiRecipientCollection();
recColl.add("recepient@gmail.com", "R1", MapiRecipientType.MAPI_TO);
MapiCalendar newCal = new MapiCalendar(
"This is Location",
"This is Summary",
"This is recurrence test",
startDate,
addHours(startDate, 3),
"organizer@domain.com",
recColl);
newCal.setRecurrence(recurrence);
ByteArrayOutputStream memory = new ByteArrayOutputStream();
try {
PersonalStorage pst = PersonalStorage.create(memory, FileFormatVersion.Unicode);
FolderInfo calendarFolder = pst.createPredefinedFolder("Calendar", StandardIpmFolder.Appointments);
calendarFolder.addMapiMessageItem(newCal);
}
finally {
memory.close();
}