Работа с элементами календаря в файле 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/kashifiqb/Aspose.Email-for-C
System::String dataDir = RunExamples::GetDataDir_Outlook();
// Create the appointment
System::SharedPtr<MapiCalendar> appointment = System::MakeObject<MapiCalendar>(L"LAKE ARGYLE WA 6743", L"Appointment", L"This is a very important meeting :)", System::DateTime(2012, 10, 2, 13, 0, 0), System::DateTime(2012, 10, 2, 14, 0, 0));
// Create the meeting
System::SharedPtr<MapiRecipientCollection> attendees = System::MakeObject<MapiRecipientCollection>();
attendees->Add(L"ReneeAJones@armyspy.com", L"Renee A. Jones", Aspose::Email::Outlook::MapiRecipientType::MAPI_TO);
attendees->Add(L"SzllsyLiza@dayrep.com", L"Szollosy Liza", Aspose::Email::Outlook::MapiRecipientType::MAPI_TO);
System::SharedPtr<MapiCalendar> meeting = System::MakeObject<MapiCalendar>(L"Meeting Room 3 at Office Headquarters", L"Meeting", L"Please confirm your availability.", System::DateTime(2012, 10, 2, 13, 0, 0), System::DateTime(2012, 10, 2, 14, 0, 0), L"CharlieKhan@dayrep.com", attendees);
System::String path = dataDir + L"AddMapiCalendarToPST_out.pst";
if (System::IO::File::Exists(path))
{
System::IO::File::Delete(path);
}
{
System::SharedPtr<PersonalStorage> pst = PersonalStorage::Create(dataDir + L"AddMapiCalendarToPST_out.pst", Aspose::Email::Outlook::Pst::FileFormatVersion::Unicode);
System::SharedPtr<FolderInfo> calendarFolder = pst->CreatePredefinedFolder(L"Calendar", Aspose::Email::Outlook::Pst::StandardIpmFolder::Appointments);
calendarFolder->AddMapiMessageItem(appointment);
calendarFolder->AddMapiMessageItem(meeting);
}

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

В этой статье показано, как получить доступ к элементам календаря из файла PST Outlook и сохранить календарь на диск в формате ICS. Используйте классы PersonalStorage и MapiCalendar для получения информации о календаре. Ниже приведены шаги по сохранению элементов календаря:

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

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

todo:image_alt_text
Следующий фрагмент кода показывает, как экспортировать элементы календаря из PST Outlook в формат ICS.
For complete examples and data files, please go to https://github.com/kashifiqb/Aspose.Email-for-C
// The path to the documents directory.
System::String dataDir = RunExamples::GetDataDir_Outlook();
// Load the Outlook PST file
System::SharedPtr<PersonalStorage> pst = PersonalStorage::FromFile(dataDir + L"Sub.pst");
// Get the Calendar folder
System::SharedPtr<FolderInfo> folderInfo = pst->get_RootFolder()->GetSubFolder(L"Inbox");
// Loop through all the calendar items in this folder
System::SharedPtr<MessageInfoCollection> messageInfoCollection = folderInfo->GetContents();
{
auto messageInfo_enumerator = (messageInfoCollection)->GetEnumerator();
decltype(messageInfo_enumerator->get_Current()) messageInfo;
while (messageInfo_enumerator->MoveNext() && (messageInfo = messageInfo_enumerator->get_Current(), true))
{
// Get the calendar information
System::SharedPtr<MapiMessage> calendar = System::DynamicCast<Aspose::Email::Outlook::MapiMessage>(pst->ExtractMessage(messageInfo)->ToMapiMessageItem());
// Display some contents on screen
System::Console::WriteLine(System::String(L"Name: ") + calendar->get_Subject());
// Save to disk in ICS format
calendar->Save(dataDir + L"\\Calendar\\" + calendar->get_Subject() + L"_out.ics");
}
}