Trabajando con elementos del calendario de Outlook

Trabajando con MapiCalendar

La clase MapiCalendar de Aspose.Email proporciona métodos y atributos para establecer varias propiedades de un elemento del calendario. Este artículo proporciona ejemplos de código para:

Creando y guardando elementos del calendario

El siguiente fragmento de código muestra cómo crear y guardar un elemento del calendario en formato ICS.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
// Create the appointment
MapiCalendar calendar = 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));
calendar.Save(dataDir + "CalendarItem_out.ics", AppointmentSaveFormat.Ics);

Guardando el elemento del calendario como MSG

El siguiente fragmento de código muestra cómo guardar el elemento del calendario como MSG.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
calendar.Save(dataDir + "CalendarItemAsMSG_out.Msg", AppointmentSaveFormat.Msg);

Establecer un ID de producto al guardar MapiCalendar a ICS

La propiedad ProductIdentifier de la clase MapiCalendarIcsSaveOptions se usa para guardar un elemento del calendario MAPI en un archivo iCalendar (ICS) preservando la información original de fecha y hora, así como un identificador de producto personalizado. La propiedad especifica el identificador del producto que creó el objeto iCalendar.

El siguiente ejemplo de código muestra cómo trabajar con datos de iCalendar (ICS) dentro de un objeto de calendario MAPI:

var icsSaveOptions = new MapiCalendarIcsSaveOptions
{
    KeepOriginalDateTimeStamp = true,
    ProductIdentifier = "Foo Ltd"
};

mapiCalendar.Save("my.ics", icsSaveOptions);

Obteniendo el número total de eventos

La clase CalendarReader permite manejar eventos de calendario sin esfuerzo. Las siguientes propiedades y un método te permiten trabajar con múltiples eventos:

  • CalendarReader.Count - La propiedad Count de la clase CalendarReader te permite recuperar el número de componentes Vevent (eventos) presentes en el calendario, facilitando el seguimiento del número total de eventos.
  • CalendarReader.IsMultiEvents - Esta propiedad determina si el calendario contiene múltiples eventos. Proporciona un valor booleano que indica si el calendario contiene más de un evento, ayudando a identificar calendarios con eventos únicos o múltiples.
  • CalendarReader.Method - La propiedad Method obtiene el tipo de método de iCalendar asociado con el objeto del calendario. Devuelve el tipo de método, como “REQUEST”, “PUBLISH” o “CANCEL”, proporcionando información valiosa sobre el propósito del calendario.
  • CalendarReader.Version - Obtiene la versión de iCalendar.
  • CalendarReader.LoadAsMultiple() Este método permite cargar una lista de eventos de un calendario que contiene múltiples eventos. Devuelve una lista de objetos Appointment, lo que permite el acceso fácil y el procesamiento de cada evento individualmente.

El siguiente ejemplo de código demuestra cómo puedes implementar estas capacidades en tu proyecto:

var reader = new CalendarReader(fileName);
Console.WriteLine("El calendario contiene " + reader.Count + " eventos");
Console.WriteLine("La versión del calendario es " + reader.Version);
Console.WriteLine("El método del calendario es " + reader.Method);
Console.WriteLine("¿El calendario contiene múltiples eventos? - " + reader.IsMultiEvents);
List<Appointment> appointments = reader.LoadAsMultiple();

Añadiendo recordatorio visual a un calendario

El siguiente fragmento de código muestra cómo añadir un recordatorio visual a un calendario.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
// Create Appointment
Appointment app = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");
MailMessage msg = new MailMessage();
msg.AddAlternateView(app.RequestApointment());
MapiMessage mapi = MapiMessage.FromMailMessage(msg);
MapiCalendar calendar = (MapiCalendar)mapi.ToMapiMessageItem();
// Set calendar Properties
calendar.ReminderSet= true;
calendar.ReminderDelta = 45;//45 min before start of event
string savedFile = (dataDir + "calendarWithDisplayReminder.ics");
calendar.Save(savedFile, AppointmentSaveFormat.Ics);

Añadiendo recordatorio de audio a un calendario

El siguiente fragmento de código muestra cómo añadir un recordatorio de audio a un calendario.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
Appointment app = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");
MailMessage msg = new MailMessage();
msg.AddAlternateView(app.RequestApointment());
MapiMessage mapi = MapiMessage.FromMailMessage(msg);
MapiCalendar calendar = (MapiCalendar)mapi.ToMapiMessageItem();
// Set calendar properties
calendar.ReminderSet = true;
calendar.ReminderDelta = 58;//58 min before start of event
calendar.ReminderFileParameter = dataDir + "Alarm01.wav";
string savedFile = (dataDir + "calendarWithAudioReminder_out.ics");
calendar.Save(savedFile, AppointmentSaveFormat.Ics);

Añadir/Recuperar archivos adjuntos de los archivos del calendario

El siguiente fragmento de código muestra cómo añadir/recuperar archivos adjuntos de los archivos del calendario.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
string[] files = new string[3];
files[0] = dataDir + "attachment_1.doc";
files[1] = dataDir + "download.png";
files[2] = dataDir + "Desert.jpg";
Appointment app1 = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");
foreach (string file in files)
{
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(file)))
{
app1.Attachments.Add(new Attachment(ms, Path.GetFileName(file)));
}
}
app1.Save(dataDir + "appWithAttachments_out.ics", AppointmentSaveFormat.Ics);
Appointment app2 = Appointment.Load(dataDir + "appWithAttachments_out.ics");
Console.WriteLine(app2.Attachments.Count);
foreach (Attachment att in app2.Attachments)
Console.WriteLine(att.Name);

Estado de los destinatarios de una solicitud de reunión

El siguiente fragmento de código muestra cómo mostrar el estado de los destinatarios de una solicitud de reunión.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
MapiMessage message = MapiMessage.FromFile(fileName);
foreach (MapiRecipient recipient in message.Recipients)
{
Console.WriteLine(recipient.RecipientTrackStatus);
}

Crear MapiCalendarTimeZone de la zona horaria estándar

El siguiente fragmento de código muestra cómo crear MapiCalendarTimeZone de la zona horaria estándar.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);

Establecer recordatorio con la cita creada

Se puede añadir un recordatorio cuando se crea una cita. Estas alarmas pueden activarse en función de diferentes criterios, como n minutos antes de que comience el horario, repetir n veces a intervalos n. Se pueden usar diferentes etiquetas para crear estos disparadores en el script encerrado entre BEGIN:VALARM y END:VALARM dentro de una cita. Hay varias variantes en las que se puede establecer el recordatorio en una cita.

Establecer un recordatorio añadiendo etiquetas

El siguiente fragmento de código muestra cómo establecer un recordatorio añadiendo etiquetas.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
string location = "Meeting Location: Room 5";
DateTime startDate = new DateTime(1997, 3, 18, 18, 30, 00),
endDate = new DateTime(1997, 3, 18, 19, 30, 00);
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add(new MailAddress("bbb@bmail.com", "First attendee"));
Appointment target = new Appointment(location, startDate, endDate, organizer, attendees);
// Audio alarm that will sound at a precise time and
// Repeat 4 more times at 15 minute intervals:
AppointmentReminder audioReminder = new AppointmentReminder();
audioReminder.Trigger = new ReminderTrigger(new DateTime(1997, 3, 17, 13, 30, 0, DateTimeKind.Utc));
audioReminder.Repeat = 4;
audioReminder.Duration = new ReminderDuration(new TimeSpan(0, 15, 0));
audioReminder.Action = ReminderAction.Audio;
ReminderAttachment attach = new ReminderAttachment(new Uri("ftp://Host.com/pub/sounds/bell-01.aud"));
audioReminder.Attachments.Add(attach);
target.Reminders.Add(audioReminder);
// Display alarm that will trigger 30 minutes before the
// Scheduled start of the event it is
// Associated with and will repeat 2 more times at 15 minute intervals:
AppointmentReminder displayReminder = new AppointmentReminder();
ReminderDuration dur = new ReminderDuration(new TimeSpan(0, -30, 0));
displayReminder.Trigger = new ReminderTrigger(dur, ReminderRelated.Start);
displayReminder.Repeat = 2;
displayReminder.Duration = new ReminderDuration(new TimeSpan(0, 15, 0));
displayReminder.Action = ReminderAction.Display;
displayReminder.Description = "Breakfast meeting with executive team at 8:30 AM EST";
target.Reminders.Add(displayReminder);
// Email alarm that will trigger 2 days before the
// Scheduled due date/time. It does not
// Repeat. The email has a subject, body and attachment link.
AppointmentReminder emailReminder = new AppointmentReminder();
ReminderDuration dur1 = new ReminderDuration(new TimeSpan(-2, 0, 0, 0));
emailReminder.Trigger = new ReminderTrigger(dur1, ReminderRelated.Start);
ReminderAttendee attendee = new ReminderAttendee("john_doe@host.com");
emailReminder.Attendees.Add(attendee);
emailReminder.Action = ReminderAction.Email;
emailReminder.Summary = "REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING";
emailReminder.Description = @"A draft agenda needs to be sent out to the attendees to the weekly managers meeting (MGR-LIST). Attached is a pointer the document template for the agenda file.";
ReminderAttachment attach1 = new ReminderAttachment(new Uri("http://Host.com/templates/agenda.doc"));
emailReminder.Attachments.Add(attach1);
target.Reminders.Add(emailReminder);
// Procedural alarm that will trigger at a precise date/time
// And will repeat 23 more times at one hour intervals. The alarm will
// Invoke a procedure file.
AppointmentReminder procReminder = new AppointmentReminder();
procReminder.Trigger = new ReminderTrigger(new DateTime(1998, 1, 1, 5, 0, 0, DateTimeKind.Utc));
procReminder.Repeat = 23;
procReminder.Duration = new ReminderDuration(new TimeSpan(1, 0, 0));
procReminder.Action = ReminderAction.Procedure;
ReminderAttachment attach2 = new ReminderAttachment(new Uri("ftp://Host.com/novo-procs/felizano.exe"));
procReminder.Attachments.Add(attach2);
target.Reminders.Add(procReminder);
target.Save(dataDir + "savedFile_out.ics");

Convertir cita EML a MSG con cuerpo HTML

Desde la versión 19.3, Aspose.Email proporciona la capacidad de convertir cita EML a MSG mientras se conserva el cuerpo HTML de la cita. Aspose.Email proporciona una MapiConversionOptions.ForcedRtfBodyForAppointment propiedad que tiene un valor predeterminado de true. Cuando el valor de MapiConversionOptions.ForcedRtfBodyForAppointment se establece en true, el cuerpo de la cita se convierte al formato RTF. Para mantener el formato del cuerpo de la cita en formato HTML, establece el valor de MapiConversionOptions.ForcedRtfBodyForAppointment en false.

El siguiente ejemplo demuestra el uso de la MapiConversionOptions.ForcedRtfBodyForAppointment propiedad para mantener el formato del cuerpo de la cita en formato HTML.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Outlook directory
string dataDir = RunExamples.GetDataDir_Outlook();
MailMessage mailMessage = MailMessage.Load(dataDir + "TestAppointment.eml");
MapiConversionOptions conversionOptions = new MapiConversionOptions();
conversionOptions.Format = OutlookMessageFormat.Unicode;
// default value for ForcedRtfBodyForAppointment is true
conversionOptions.ForcedRtfBodyForAppointment = false;
MapiMessage mapiMessage = MapiMessage.FromMailMessage(mailMessage, conversionOptions);
Console.WriteLine("Body Type: " + mapiMessage.BodyType);
mapiMessage.Save(dataDir + "TestAppointment_out.msg");