Работа с элементами календаря в PST-файле
Добавление MapiCalendar в PST
Создание нового PST-файла и добавление подпапок показало, как создать PST-файл и добавить к нему подпапку. С помощью Aspose.Email вы можете добавить MapiCalendar в подпапку Календаря PST-файла, который вы создали или загрузили. Ниже приведены шаги для добавления MapiCalendar в PST:
- Создайте объект MapiCalendar.
- Установите свойства MapiCalendar с помощью конструктора и методов.
- Создайте PST с помощью метода PersonalStorage.Create().
- Создайте предопределенную папку (Календарь) в корне PST-файла, обратившись к корневой папке и затем вызвав метод AddMapiMessageItem().
Следующий фрагмент кода показывает, как создать MapiCalendar и затем добавить его в папку календаря только что созданного PST-файла.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string dataDir = RunExamples.GetDataDir_Outlook(); | |
// Create the appointment | |
MapiCalendar appointment = new MapiCalendar( | |
"LAKE ARGYLE WA 6743", | |
"Appointment", | |
"This is a very important meeting :)", | |
new DateTime(2012, 10, 2, 13, 0, 0), | |
new DateTime(2012, 10, 2, 14, 0, 0)); | |
// 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.", | |
new DateTime(2012, 10, 2, 13, 0, 0), | |
new DateTime(2012, 10, 2, 14, 0, 0), | |
"CharlieKhan@dayrep.com", | |
attendees | |
); | |
string path = dataDir + "AddMapiCalendarToPST_out.pst"; | |
if (File.Exists(path)) | |
{ | |
File.Delete(path); | |
} | |
using (PersonalStorage pst = PersonalStorage.Create(dataDir + "AddMapiCalendarToPST_out.pst", FileFormatVersion.Unicode)) | |
{ | |
FolderInfo calendarFolder = pst.CreatePredefinedFolder("Calendar", StandardIpmFolder.Appointments); | |
calendarFolder.AddMapiMessageItem(appointment); | |
calendarFolder.AddMapiMessageItem(meeting); | |
} |
Сохранение элементов календаря из PST на диск в формате ICS
Эта статья показывает, как получить элементы календаря из файла Outlook PST и сохранить календарь на диск в формате ICS. Используйте классы PersonalStorage и MapiCalendar для получения информации о календаре. Ниже приведены шаги для сохранения элементов календаря:
- Загрузите PST-файл в класс PersonalStorage.
- Просмотрите папку Календарь.
- Получите содержимое папки Календарь, чтобы получить коллекцию сообщений.
- Переберите коллекцию сообщений.
- Вызовите метод PersonalStorage.ExtractMessage(), чтобы получить информацию о контакте в классе MapiCalendar.
- Вызовите метод MapiCalendar.Save(), чтобы сохранить элемент календаря на диск в формате ICS.
Программа ниже загружает PST-файл с диска и сохраняет все элементы календаря в формате ICS. Файлы ICS затем можно использовать в любой другой программе, которая может загрузить стандартный файл календаря ICS. Открытый в Microsoft Outlook, файл ICS выглядит как на приведенном ниже скриншоте.
Следующий фрагмент кода показывает, как экспортировать элементы календаря из Outlook PST в формат ICS. |
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_Outlook(); | |
// Load the Outlook PST file | |
PersonalStorage pst = PersonalStorage.FromFile(dataDir + "Sub.pst"); | |
// Get the Calendar folder | |
FolderInfo folderInfo = pst.RootFolder.GetSubFolder("Inbox"); | |
// Loop through all the calendar items in this folder | |
MessageInfoCollection messageInfoCollection = folderInfo.GetContents(); | |
foreach (MessageInfo messageInfo in messageInfoCollection) | |
{ | |
// Get the calendar information | |
MapiMessage calendar = (MapiMessage)pst.ExtractMessage(messageInfo).ToMapiMessageItem(); | |
// Display some contents on screen | |
Console.WriteLine("Name: " + calendar.Subject); | |
// Save to disk in ICS format | |
calendar.Save(dataDir + @"\Calendar\" + calendar.Subject + "_out.ics"); | |
} |
Сохранение как ICS с оригинальной меткой времени
Следующие функции доступны для сохранения элементов календаря в формате ICS с сохранением их оригинальной информации о дате и времени:
-
MapiCalendarIcsSaveOptions - Позволяет указывать дополнительные параметры при сохранении MapiCalendar в формат Ics.
-
MapiCalendarIcsSaveOptions.KeepOriginalDateTimeStamp - Позволяет сохранить оригинальное значение DateTimeStamp в выходном файле.
Используйте приведенный ниже образец кода, чтобы реализовать функции в своем проекте:
var cal = pst.ExtractMessage(msgInfo).ToMapiMessageItem() as MapiCalendar;
if (cal != null)
{
cal.Save("cal.ics", new MapiCalendarIcsSaveOptions() { KeepOriginalDateTimeStamp = true});
}
Изменение/удаление событий из повторений
Исключения могут быть добавлены к существующим повторениям с использованием API Aspose.Email для .NET. Следующий образец кода иллюстрирует использование этой функции.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
DateTime startDate = DateTime.Now.Date.AddHours(12); | |
MapiCalendarEventRecurrence recurrence = new MapiCalendarEventRecurrence(); | |
MapiCalendarRecurrencePattern pattern = recurrence.RecurrencePattern = new MapiCalendarDailyRecurrencePattern(); | |
pattern.PatternType = MapiCalendarRecurrencePatternType.Day; | |
pattern.Period = 1; | |
pattern.EndType = MapiCalendarRecurrenceEndType.NeverEnd; | |
DateTime exceptionDate = startDate.AddDays(1); | |
// adding one exception | |
pattern.Exceptions.Add(new MapiCalendarExceptionInfo | |
{ | |
Location = "London", | |
Subject = "Subj", | |
OriginalStartDate = exceptionDate, | |
StartDateTime = exceptionDate, | |
EndDateTime = exceptionDate.AddHours(5) | |
}); | |
pattern.ModifiedInstanceDates.Add(exceptionDate); | |
// every modified instance also has to have an entry in the DeletedInstanceDates field with the original instance date. | |
pattern.DeletedInstanceDates.Add(exceptionDate); | |
// adding one deleted instance | |
pattern.DeletedInstanceDates.Add(exceptionDate.AddDays(2)); | |
MapiRecipientCollection recColl = new MapiRecipientCollection(); | |
recColl.Add("receiver@domain.com", "receiver", MapiRecipientType.MAPI_TO); | |
MapiCalendar newCal = new MapiCalendar( | |
"This is Location", | |
"This is Summary", | |
"This is recurrence test", | |
startDate, | |
startDate.AddHours(3), | |
"organizer@domain.com", | |
recColl); | |
newCal.Recurrence = recurrence; | |
using (MemoryStream memory = new MemoryStream()) | |
{ | |
PersonalStorage pst = PersonalStorage.Create(memory, FileFormatVersion.Unicode); | |
FolderInfo calendarFolder = pst.CreatePredefinedFolder("Calendar", StandardIpmFolder.Appointments); | |
calendarFolder.AddMapiMessageItem(newCal); | |
} |