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:

  1. Crie um MapiCalendar objeto.
  2. Defina as propriedades do MapiCalendar usando um construtor e métodos.
  3. Crie um PST usando o método PersonalStorage.Create().
  4. 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:

  1. Carregue o arquivo PST na classe PersonalStorage.
  2. Navegue até a pasta Calendar.
  3. Obtenha o conteúdo da pasta Calendar para obter a coleção de mensagens.
  4. Percorra a coleção de mensagens.
  5. Chame o método PersonalStorage.ExtractMessage() para obter as informações do contato na classe MapiCalendar.
  6. 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.

todo:image_alt_text
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:

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);
}