Gerenciar Compromissos: Criar & Manipular, Converter ICS para MSG
Criar um Compromisso e Salvar em Disco nos Formatos MSG ou ICS
O 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.
- Crie uma instância do Appointment classe e inicialize‑a com este construtor.
- Passe os seguintes argumentos no construtor acima
- Local
- Resumo
- Descrição
- Data de Início
- Data de Término
- Organizador
- Participantes
- 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:
- Crie uma nova instância da classe Appointment.
- 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.
- Defina o HtmlDescription propriedade do objeto de compromisso, indicando que a descrição está em formato HTML.
- 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.
- 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:
- Crie uma instância do Appointment classe.
- Chame o Load() método fornecendo o caminho do arquivo ICS.
- 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
}