Trabajando con elementos de calendario en archivo PST

Agregar MapiCalendar a PST

Crear un nuevo archivo PST y agregar subcarpetas mostró cómo crear un archivo PST y agregarle una subcarpeta. Con Aspose.Email puedes agregar MapiCalendar a la subcarpeta de Calendario de un archivo PST que has creado o cargado. A continuación se detallan los pasos para agregar MapiCalendar a un PST:

  1. Crear un MapiCalendar objeto.
  2. Establecer las propiedades de MapiCalendar utilizando un constructor y métodos.
  3. Crear un PST usando el método PersonalStorage.Create().
  4. Crear una carpeta predefinida (Calendario) en la raíz del archivo PST accediendo a la carpeta raíz y luego llamando al método AddMapiMessageItem().

El siguiente fragmento de código te muestra cómo crear un MapiCalendar y luego agregarlo a la carpeta de calendario de un archivo PST recién creado.

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

Guardar elementos de calendario de PST en disco en formato ICS

Este artículo muestra cómo acceder a elementos de calendario de un archivo PST de Outlook y guardar el calendario en disco en formato ICS. Usa las clases PersonalStorage y MapiCalendar para obtener la información del calendario. A continuación se detallan los pasos para guardar elementos de calendario:

  1. Cargar el archivo PST en la clase PersonalStorage.
  2. Navegar a la carpeta de Calendario.
  3. Obtener el contenido de la carpeta de Calendario para obtener la colección de mensajes.
  4. Recorrer la colección de mensajes.
  5. Llamar al método PersonalStorage.ExtractMessage() para obtener la información de contacto en la clase MapiCalendar.
  6. Llamar al método MapiCalendar.Save() para guardar el elemento del calendario en disco en formato ICS.

El programa a continuación carga un archivo PST desde el disco y guarda todos los elementos del calendario en formato ICS. Los archivos ICS pueden luego ser utilizados en cualquier otro programa que pueda cargar el archivo estándar de calendario ICS. Abierto en Microsoft Outlook, un archivo ICS se ve como el de la captura de pantalla a continuación.

todo:image_alt_text
El siguiente fragmento de código te muestra cómo exportar los elementos del calendario de PST de Outlook a 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");
}

Guardar como ICS con la marca de tiempo original

Las siguientes funciones están disponibles para guardar elementos de calendario como ICS preservando su información original de fecha y hora:

Utiliza el siguiente ejemplo de código para implementar las funciones en tu proyecto:

var cal = pst.ExtractMessage(msgInfo).ToMapiMessageItem() as MapiCalendar;

if (cal != null)
{
  cal.Save("cal.ics", new MapiCalendarIcsSaveOptions() { KeepOriginalDateTimeStamp = true});
}

Modificar/Eliminar ocurrencias de recurrencias

Las excepciones pueden ser añadidas a recurrencias existentes utilizando el API Aspose.Email para .NET. El siguiente ejemplo de código ilustra el uso de esta función.

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