Trabalhando com itens de calendário em arquivo PST

Adicionando 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 objeto MapiCalendar.
  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 pré‑definida (Calendar) na raiz do arquivo PST acessando a pasta raiz e então chamando o método add_mapi_message_item().

O trecho de código a seguir mostra como criar um MapiCalendar e então adicioná‑lo à pasta de calendário de um arquivo PST recém‑criado.

Salvar Itens de Calendário do PST no Disco em Formato ICS

Este artigo mostra como acessar itens de calendário de um arquivo PST do Outlook e salvar o calendário no disco no formato ICS. Use as classes PersonalStorage e MapiCalendar para obter as informações de calendário. Abaixo estão os passos para salvar itens de calendário:

  1. Carregue o arquivo PST na classe PersonalStorage.
  2. Navegue pela pasta Calendar.
  3. Obtenha o conteúdo da pasta Calendar para obter a coleção de mensagens.
  4. Iterar pela coleção de mensagens.
  5. Chame o método PersonalStorage.extract_message() para obter as informações de contato na classe MapiCalendar.
  6. Chame o método MapiCalendar.save() para salvar o item de calendário no disco no formato ICS.

O programa abaixo carrega um arquivo PST do disco e salva todos os itens de calendário no formato ICS. Os arquivos ICS podem então ser usados em qualquer outro programa que possa carregar o arquivo de calendário padrão ICS. Ao abrir no Microsoft Outlook, um arquivo ICS se parece com o da captura de tela abaixo.

|todo:image_alt_text| | :- | O trecho de código a seguir mostra como exportar os itens de calendário do Outlook PST para o formato ICS.

Salvando como ICS com carimbo de data/hora original

O método keep_original_date_time_stamp da MapiCalendarIcsSaveOptions classe permite preservar as marcas de data e hora originais dos itens de calendário ao salvá‑los como um arquivo ICS (iCalendar). O exemplo de código a seguir demonstra a implementação deste 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/Excluir Ocorrências de Recorrências

Exceções podem ser adicionadas a recorrências existentes usando a API Aspose.Email para .NET. O exemplo de código a seguir ilustra o uso desse recurso.

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)