Trabajar con ítems de calendario en archivo PST

Agregar MapiCalendar al PST

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

  1. Crear un objeto MapiCalendar.
  2. Establezca las propiedades de MapiCalendar usando un constructor y métodos.
  3. Cree un PST usando el método PersonalStorage.create().
  4. Cree una carpeta predefinida (Calendar) en la raíz del archivo PST accediendo a la carpeta raíz y luego llamando al método add_mapi_message_item().

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

Guardar elementos del calendario del PST en disco en formato ICS

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

  1. Cargue el archivo PST en la clase PersonalStorage.
  2. Explorar la carpeta Calendar.
  3. Obtener el contenido de la carpeta Calendar para obtener la colección de mensajes.
  4. Iterar a través de la colección de mensajes.
  5. Llame al método PersonalStorage.extract_message() para obtener la información de contacto en la clase MapiCalendar.
  6. Llame 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 usarse en cualquier otro programa que pueda cargar el archivo de calendario estándar ICS. Al abrirse 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 le muestra cómo exportar los elementos del calendario de Outlook PST al formato ICS.

Guardando como ICS con Marca de Tiempo Original

El método keep_original_date_time_stamp de la MapiCalendarIcsSaveOptions la clase permite preservar las marcas de fecha y hora originales de los elementos del calendario al guardarlos como un archivo ICS (iCalendar). El siguiente ejemplo de código demuestra la implementación de este método:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("my.pst")

calendar_folder = pst.get_predefined_folder(ae.storage.pst.StandardIpmFolder.APPOINTMENTS)

for msg_info in calendar_folder.enumerate_messages():
    cal = pst.extract_message(msg_info).to_mapi_message_item()

    save_options = ae.mapi.MapiCalendarIcsSaveOptions()
    save_options.keep_original_date_time_stamp = True

    if not (cal is None):
      cal.save("cal.ics", save_options)

Modificar/Eliminar ocurrencias de recurrencias

Se pueden agregar excepciones a recurrencias existentes usando la API de Aspose.Email para .NET. El siguiente ejemplo de código ilustra el uso de esta característica.

from datetime import datetime, timedelta
from aspose.email.storage.pst import PersonalStorage, StandardIpmFolder, FileFormatVersion
from aspose.email.mapi import MapiCalendar, MapiCalendarEventRecurrence, \
    MapiCalendarDailyRecurrencePattern, MapiCalendarRecurrenceEndType, \
    MapiCalendarExceptionInfo, MapiCalendarRecurrencePatternType, \
    MapiRecipientCollection, MapiRecipientType

start_date = datetime.now().date()

recurrence = MapiCalendarEventRecurrence()
pattern = MapiCalendarDailyRecurrencePattern()
pattern.pattern_type = MapiCalendarRecurrencePatternType.DAY
pattern.period = 1
pattern.end_type = MapiCalendarRecurrenceEndType.NEVER_END
recurrence.recurrence_pattern = pattern

exception_date = start_date + timedelta(days=1)

# adding one exception
exception_info = MapiCalendarExceptionInfo()
exception_info.location = "London"
exception_info.subject = "Subj"
exception_info.original_start_date = exception_date
exception_info.start_date_time = exception_date
exception_info.end_date_time = exception_date + timedelta(hours=5)
pattern.exceptions.append(exception_info)
pattern.modified_instance_dates.append(exception_date)
# every modified instance also has to have an entry in the DeletedInstanceDates field with the original instance date.
pattern.deleted_instance_dates.append(exception_date)

# adding one deleted instance
pattern.deleted_instance_dates.append(exception_date + timedelta(days=2))

rec_coll = MapiRecipientCollection()
rec_coll.add("receiver@domain.com", "receiver", MapiRecipientType.TO)
new_cal = MapiCalendar(
    "This is Location",
    "This is Summary",
    "This is recurrence test",
    start_date,
    start_date + timedelta(hours=3),
    "organizer@domain.com",
    rec_coll
)
new_cal.recurrence = recurrence

with PersonalStorage.create("output.pst", FileFormatVersion.UNICODE) as pst:
    calendar_folder = pst.create_predefined_folder("Calendar", StandardIpmFolder.APPOINTMENTS)
    calendar_folder.add_message(new_cal)