Trabalhando com Itens de Calendário em Arquivo PST
Adicionar MapiCalendar ao PST
Criar um Novo Arquivo PST e Adicionar Subpastas mostrou como criar um arquivo PST e adicionar uma subpasta a ele. Com Aspose.Email, você pode adicionar MapiCalendar à subpasta Calendar de um arquivo PST que você criou ou carregou. Abaixo estão os passos para adicionar MapiCalendar a um PST:
- Crie um MapiCalendar objeto.
- Defina as propriedades do MapiCalendar usando um construtor e métodos.
- Crie um PST usando o método PersonalStorage.Create().
- Crie uma pasta predefinida (Calendar) na raiz do arquivo PST acessando a pasta raiz e, em seguida, chamando o método AddMapiMessageItem().
O seguinte código de exemplo mostra como criar um MapiCalendar e, em seguida, adicioná-lo à pasta de calendário de um arquivo PST recém-criado.
// 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); | |
} |
Salvar Itens de Calendário de PST no Disco em Formato ICS
Este artigo mostra como acessar itens de calendário a partir de um arquivo PST do Outlook e salvar o calendário no disco em formato ICS. Use as classes PersonalStorage e MapiCalendar para obter as informações do calendário. Abaixo estão os passos para salvar itens de calendário:
- Carregue o arquivo PST na classe PersonalStorage.
- Navegue até a pasta Calendar.
- Obtenha o conteúdo da pasta Calendar para obter a coleção de mensagens.
- Percorra a coleção de mensagens.
- Chame o método PersonalStorage.ExtractMessage() para obter as informações do contato na classe MapiCalendar.
- Chame o método MapiCalendar.Save() para salvar o item de calendário no disco em formato ICS.
O programa abaixo carrega um arquivo PST do disco e salva todos os itens de calendário em formato ICS. Os arquivos ICS podem então ser usados em qualquer outro programa que possa carregar o arquivo padrão de calendário ICS. Aberto no Microsoft Outlook, um arquivo ICS se parece com o mostrado na captura de tela abaixo.
![]() |
---|
O seguinte código de exemplo mostra como exportar os itens de calendário do PST do Outlook para o formato 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"); | |
} |
Salvar como ICS com Timestamp Original
Os seguintes recursos estão disponíveis para salvar itens de calendário como ICS preservando suas informações originais de data e hora:
-
MapiCalendarIcsSaveOptions - Permite especificar opções adicionais ao salvar MapiCalendar no formato Ics.
-
MapiCalendarIcsSaveOptions.KeepOriginalDateTimeStamp - Permite manter o valor original de DateTimeStamp no arquivo de saída.
Use o exemplo de código abaixo para implementar os recursos em seu projeto:
var cal = pst.ExtractMessage(msgInfo).ToMapiMessageItem() as MapiCalendar;
if (cal != null)
{
cal.Save("cal.ics", new MapiCalendarIcsSaveOptions() { KeepOriginalDateTimeStamp = true});
}
Modificar/Deletar Ocorrências de Recorrências
Exceções podem ser adicionadas a recorrências existentes usando a API Aspose.Email para .NET. O seguinte exemplo de código ilustra o uso desse recurso.
// 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); | |
} |