Gerenciar Compromissos: Criar & Manipular, Converter ICS para MSG

Criar um Compromisso e Salvar em Disco nos Formatos MSG ou ICS

Appointment classe em Aspose.Email para .NET pode ser usada para criar um novo compromisso. Neste artigo, criamos primeiro um compromisso e o salvamos em disco no formato ICS. As etapas a seguir são necessárias para criar um compromisso e salvá-lo em disco.

  1. Crie uma instância do Appointment classe e inicialize‑a com este construtor.
  2. Passe os seguintes argumentos no construtor acima
    1. Local
    2. Resumo
    3. Descrição
    4. Data de Início
    5. Data de Término
    6. Organizador
    7. Participantes
  3. Chame o Save() método e especifique o nome do arquivo e o formato nos argumentos.

O compromisso pode ser aberto no Microsoft Outlook ou em qualquer programa que possa carregar um arquivo ICS. Se o arquivo for aberto no Microsoft Outlook, ele adiciona automaticamente o compromisso ao calendário do Outlook.

O trecho de código a seguir mostra como criar e salvar um compromisso em disco nos formatos ICS ou MSG.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET

// Create and initialize an instance of the Appointment class
Appointment appointment = new Appointment(
    "Meeting Room 3 at Office Headquarters",// Location
    "Monthly Meeting",                      // Summary
    "Please confirm your availability.",    // Description
    new DateTime(2015, 2, 8, 13, 0, 0),     // Start date
    new DateTime(2015, 2, 8, 14, 0, 0),     // End date
    "from@domain.com",                      // Organizer
    "attendees@domain.com");                // Attendees

// Save the appointment to disk in ICS format            
appointment.Save(fileName + ".ics", new AppointmentIcsSaveOptions());
Console.WriteLine("Appointment created and saved to disk successfully.");

// Save the appointment to disk in MSG format
appointment.Save(fileName + ".msg", new AppointmentMsgSaveOptions(););
Console.WriteLine("Appointment created and saved to disk successfully.");

Criar um Compromisso com Conteúdo HTML

Você pode especificar representações alternativas da descrição do evento em diferentes tipos de conteúdo usando o cabeçalho X-ALT-DESC. Ele permite que os destinatários do arquivo iCalendar escolham a representação que melhor atenda às suas necessidades. Por exemplo, você pode incluir uma descrição em texto simples usando o tipo de conteúdo "text/plain" e uma descrição em HTML usando o tipo de conteúdo "text/html". O cabeçalho X-ALT-DESC é adicionado para cada representação alternativa. Para criar um compromisso com conteúdo HTML, defina o HtmlDescription propriedade.

Experimente o seguinte exemplo de código para criar um compromisso com descrição HTML alternativa:

  1. Crie uma nova instância da classe Appointment.
  2. Forneça os parâmetros necessários ao construtor Appointment:
    • Especifique o local do compromisso.
    • Defina a data e hora de início.
    • Defina a data e hora de término.
    • Especifique o organizador.
    • Especifique o participante.
  3. Defina o HtmlDescription propriedade do objeto de compromisso, indicando que a descrição está em formato HTML.
  4. Defina a propriedade Description do objeto de compromisso para uma string formatada em HTML, delimitada por uma string multilinha:
    • A marcação HTML inclui um bloco <style> definindo uma classe CSS chamada "text" com estilos de fonte.
    • O corpo HTML contém uma tag de parágrafo <p> com a classe CSS "text", e a mensagem real de convite.
  5. O objeto de compromisso está agora pronto, e você pode executar operações adicionais ou salvá-lo como um arquivo iCalendar.
var appointment = new Appointment("Bygget 83",
    DateTime.UtcNow, // start date
    DateTime.UtcNow.AddHours(1), // end date
    new MailAddress("TintinStrom@from.com", "Tintin Strom"), // organizer
    new MailAddress("AinaMartensson@to.com", "Aina Martensson")) // attendee
{
    HtmlDescription = @"
    <html>
     <style type=""text/css"">
      .text {
             font-family:'Comic Sans MS';
             font-size:16px;
            }
     </style>
    <body>
     <p class=""text"">Hi, I'm happy to invite you to our party.</p>
    </body>
    </html>"
};

Criar uma Solicitação de Compromisso em Rascunho

Foi mostrado em nossos artigos anteriores como criar e salvar um compromisso no formato ICS. Muitas vezes é necessário criar uma solicitação de compromisso no modo Rascunho, assim as informações básicas são adicionadas e então o mesmo compromisso em rascunho pode ser encaminhado a outros usuários para as alterações necessárias de acordo com usos individuais. Para salvar um compromisso no modo Rascunho, o MethodType propriedade da classe Appointment deve ser definida como AppointmentMethodType.Publish. O trecho de código a seguir mostra como criar uma solicitação de compromisso em rascunho.

string sender = "test@gmail.com";
string recipient = "test@email.com";

MailMessage message = new MailMessage(sender, recipient, string.Empty, string.Empty);

Appointment app = new Appointment(string.Empty, DateTime.Now, DateTime.Now, sender, recipient)
{
    MethodType = AppointmentMethodType.Publish
};

message.AddAlternateView(app.RequestApointment());

MapiMessage msg = MapiMessage.FromMailMessage(message);

// Save the appointment as draft.
msg.Save(dstDraft);

Console.WriteLine(Environment.NewLine + "Draft saved at " + dstDraft);

Criação de Compromisso Rascunho a partir de Texto

O trecho de código a seguir mostra como criar um compromisso em rascunho a partir de Texto. 

string ical = @"BEGIN:VCALENDAR
METHOD:PUBLISH
PRODID:-//Aspose Ltd//iCalender Builder (v3.0)//EN
VERSION:2.0
BEGIN:VEVENT
ATTENDEE;CN=test@gmail.com:mailto:test@gmail.com
DTSTART:20130220T171439
DTEND:20130220T174439
DTSTAMP:20130220T161439Z
END:VEVENT
END:VCALENDAR";

string sender = "test@gmail.com";
string recipient = "test@email.com";
MailMessage message = new MailMessage(sender, recipient, string.Empty, string.Empty);
AlternateView av = AlternateView.CreateAlternateViewFromString(ical, new ContentType("text/calendar"));
message.AlternateViews.Add(av);
MapiMessage msg = MapiMessage.FromMailMessage(message);
msg.Save(dataDir + "draft_out.msg");

Personalizar Compromissos

Definir o Status dos Participantes dos Compromissos

A API Aspose.Email para .NET permite definir o status dos participantes de um compromisso ao formular uma mensagem de resposta. Isso adiciona a propriedade PARTSTAT ao arquivo ICS.

DateTime startDate = new DateTime(2011, 12, 10, 10, 12, 11),
         endDate = new DateTime(2012, 11, 13, 13, 11, 12);
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
MailAddress attendee1 = new MailAddress("bbb@bmail.com", "First attendee");
MailAddress attendee2 = new MailAddress("ccc@cmail.com", "Second attendee");

attendee1.ParticipationStatus = ParticipationStatus.Accepted;
attendee2.ParticipationStatus = ParticipationStatus.Declined;
attendees.Add(attendee1);
attendees.Add(attendee2);

Appointment target = new Appointment(location, startDate, endDate, organizer, attendees);

Personalizar o Identificador de Produto para iCalendar

A API Aspose.Email para .NET permite obter ou definir o identificador de produto que criou o objeto iCalendar.

string description = "Test Description";
Appointment app = new Appointment("location", "test appointment", description, DateTime.Today,
DateTime.Today.AddDays(1), "first@test.com", "second@test.com");

IcsSaveOptions saveOptions = IcsSaveOptions.Default;
saveOptions.ProductId = "Test Corporation";
app.Save(dataDir + "ChangeProdIdOfICS.ics", saveOptions);

Carregando Compromissos

Além disso, o Appointment classe pode ser usada para carregar um compromisso a partir de um arquivo ICS.

Carregar um Compromisso em Formato ICS

Para carregar um compromisso em formato ICS, os seguintes passos são necessários:

  1. Crie uma instância do Appointment classe.
  2. Chame o Load() método fornecendo o caminho do arquivo ICS.
  3. Leia qualquer propriedade para obter qualquer informação do compromisso (arquivo ICS).

O trecho de código a seguir mostra como carregar um compromisso no formato ICS.

// Load an Appointment just created and saved to disk and display its details.
Appointment loadedAppointment = Appointment.Load(dstEmail);
Console.WriteLine(Environment.NewLine + "Loaded Appointment details are as follows:");
// Display the appointment information on screen
Console.WriteLine("Summary: " + loadedAppointment.Summary);
Console.WriteLine("Location: " + loadedAppointment.Location);
Console.WriteLine("Description: " + loadedAppointment.Description);
Console.WriteLine("Start date: " + loadedAppointment.StartDate);
Console.WriteLine("End date: " + loadedAppointment.EndDate);
Console.WriteLine("Organizer: " + appointment.Organizer);
Console.WriteLine("Attendees: " + appointment.Attendees);
Console.WriteLine(Environment.NewLine + "Appointment loaded successfully from " + dstEmail);

Converter ICS para MSG

A API permite converter facilmente um Compromisso em um objeto de mensagem. O exemplo de código a seguir mostra como converter uma solicitação de compromisso em um MailMessage ou MapiMessage:

var appointment = Appointment.Load("appRequest.ics");

var eml = appointment.ToMailMessage();
var msg = appointment.ToMapiMessage();

Ler Múltiplos Eventos de um Arquivo ICS

List<Appointment> appointments = new List<Appointment>();
CalendarReader reader = new CalendarReader(dataDir + "US-Holidays.ics");

while (reader.NextEvent())
{
    appointments.Add(reader.Current);
}
//working with appointments...

Escrever Múltiplos Eventos em Arquivo ICS

IcsSaveOptions saveOptions = new IcsSaveOptions();
saveOptions.Action = AppointmentAction.Create;
using (CalendarWriter writer = new CalendarWriter(dataDir + "WriteMultipleEventsToICS_out.ics", saveOptions))
{
    for (int i = 0; i < 10; i++)
    {
        Appointment app = new Appointment(string.Empty, DateTime.Now, DateTime.Now, "sender@domain.com", "receiver@domain.com");
        app.Description = "Test body " + i;
        app.Summary = "Test summary:" + i;
        writer.Write(app);
    }
}

Determinar a Versão do Compromisso

Para determinar a versão de um compromisso, você pode usar o Appointment.Version propriedade do Appointment classe. Esta propriedade auxilia a determinar com base em qual versão seus arquivos foram criados, garantindo integração com outros sistemas e aplicativos.

O exemplo de código a seguir mostra como implementar esta propriedade em seu projeto:

var app = Appointment.Load("meeting.ics");

if (app.Version == 1.0)
{
    // do something
}