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:
- Crear un MapiCalendar objeto.
- Establecer las propiedades de MapiCalendar utilizando un constructor y métodos.
- Crear un PST usando el método PersonalStorage.Create().
- 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:
- Cargar el archivo PST en la clase PersonalStorage.
- Navegar a la carpeta de Calendario.
- Obtener el contenido de la carpeta de Calendario para obtener la colección de mensajes.
- Recorrer la colección de mensajes.
- Llamar al método PersonalStorage.ExtractMessage() para obtener la información de contacto en la clase MapiCalendar.
- 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.
![]() |
---|
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:
-
MapiCalendarIcsSaveOptions - Permite especificar opciones adicionales al guardar MapiCalendar en formato Ics.
-
MapiCalendarIcsSaveOptions.KeepOriginalDateTimeStamp - Permite mantener el valor original de DateTimeStamp en el archivo de salida.
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); | |
} |