Gestion des éléments du calendrier Outlook
Cet article couvre Outlook MapiCalendar éléments de calendrier sauvegardés comme MSG. Pour travailler avec les rendez‑vous iCalendar (ICS) basés sur les normes et les demandes de réunion, voir Gérer les rendez‑vous; pour stocker et lire les éléments de calendrier à l’intérieur d’un PST, voir Gestion des éléments de calendrier dans les fichiers PST.
Aspose.Email MapiCalendar La classe fournit des méthodes et des attributs pour définir diverses propriétés d’un élément de calendrier. Cette section fournit des exemples de code pour :
- Créer et enregistrer des éléments de calendrier
- Enregistrer les éléments du calendrier en fichiers MSG
- Enregistrer les ID de produit pour les éléments de calendrier MAPI au format ICS
- Obtenir le nombre total d’événements
- Ajouter des rappels d’affichage
- Ajouter des rappels audio
- Ajouter/Récupérer des pièces jointes à partir de fichiers de calendrier
- Vérifier le statut des destinataires dans les demandes de réunion
- Créer un fuseau horaire MAPI Calendar à partir d’un fuseau horaire standard
- Définir des rappels pour les rendez‑vous
- Convertir le rendez‑vous EML en MSG avec corps HTML
- Définir manuellement l’état des éléments de calendrier MAPI
Créer et enregistrer des éléments du calendrier
L’extrait de code suivant montre comment créer et enregistrer un élément de calendrier au format ICS.
// 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);
Enregistrer les éléments du calendrier en fichiers MSG
L’extrait de code suivant montre comment enregistrer l’élément de calendrier au format MSG.
calendar.Save(dataDir + "CalendarItemAsMSG_out.Msg", AppointmentSaveFormat.Msg);
Enregistrer les ID de produit pour les éléments de calendrier MAPI au format ICS
Le ProductIdentifier propriété du MapiCalendarIcsSaveOptions la classe est utilisée pour enregistrer un élément de calendrier MAPI dans un fichier iCalendar (ICS) en préservant les informations de date et d’heure d’origine ainsi qu’un identifiant de produit personnalisé. La propriété spécifie l’identifiant du produit qui a créé l’objet iCalendar.
L’exemple de code suivant montre comment travailler avec les données iCalendar (ICS) au sein d’un objet de calendrier MAPI :
var icsSaveOptions = new MapiCalendarIcsSaveOptions
{
KeepOriginalDateTimeStamp = true,
ProductIdentifier = "Foo Ltd"
};
mapiCalendar.Save("my.ics", icsSaveOptions);
Obtenir le nombre total d’événements
Le CalendarReader classe permet de gérer facilement les événements de calendrier. Les propriétés suivantes et une méthode vous permettent de travailler avec plusieurs événements :
- CalendarReader.Count - La propriété Count de la classe CalendarReader vous permet de récupérer le nombre de composants Vevent (événements) présents dans le calendrier, ce qui facilite le suivi du nombre total d’événements.
- CalendarReader.IsMultiEvents - Cette propriété détermine si le calendrier contient plusieurs événements. Elle renvoie une valeur booléenne indiquant si le calendrier comporte plus d’un événement, aidant à identifier les calendriers à événements uniques ou multiples.
- CalendarReader.Method - La propriété Method récupère le type de méthode iCalendar associé à l’objet calendrier. Elle renvoie le type de méthode, tel que « REQUEST », « PUBLISH » ou « CANCEL », fournissant des informations précieuses sur le but du calendrier.
- CalendarReader.Version - Obtient la version d’iCalendar.
- CalendarReader.LoadAsMultiple() Cette méthode permet de charger une liste d’événements depuis un calendrier contenant plusieurs événements. Elle renvoie une liste d’objets Appointment, facilitant l’accès et le traitement de chaque événement individuellement.
L’exemple de code suivant montre comment vous pouvez implémenter ces capacités dans votre projet :
var reader = new CalendarReader(fileName);
Console.WriteLine("Calendar contains " + reader.Count + " events");
Console.WriteLine("The Version of the calendar is " + reader.Version);
Console.WriteLine("The Method of the calendar is " + reader.Method);
Console.WriteLine("Does the calendar contain multiple events? - " + reader.IsMultiEvents);
List<Appointment> appointments = reader.LoadAsMultiple();
Ajouter des rappels d’affichage
L’extrait de code suivant montre comment ajouter un rappel d’affichage à un calendrier.
// 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);
Ajouter des rappels audio
L’extrait de code suivant montre comment ajouter un rappel audio à un calendrier.
// 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);
Ajouter/Récupérer des pièces jointes à partir de fichiers de calendrier
L’extrait de code suivant montre comment ajouter/récupérer des pièces jointes à partir de fichiers de calendrier.
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);
Vérifier le statut des destinataires dans les demandes de réunion
L’extrait de code suivant montre comment afficher le statut des destinataires d’une demande de réunion.
MapiMessage message = MapiMessage.FromFile(fileName);
foreach (MapiRecipient recipient in message.Recipients)
{
Console.WriteLine(recipient.RecipientTrackStatus);
}
Créer un fuseau horaire MAPI Calendar à partir d’un fuseau horaire standard
L’extrait de code suivant montre comment créer un MapiCalendarTimeZone à partir d’un fuseau horaire standard.
MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);
Définir des rappels pour les rendez‑vous
Un rappel peut être ajouté lors de la création d’un rendez‑vous. Ces alarmes peuvent se déclencher selon différents critères tels que n minutes avant le début de la planification, se répéter n fois à des intervalles de n. Différentes balises peuvent être utilisées pour créer ces déclencheurs dans le script encadré par BEGIN:VALARM et END:VALARM au sein d’un rendez‑vous. Il existe plusieurs variantes pour définir un rappel sur un rendez‑vous.
Ajouter des balises pour définir des rappels
L’extrait de code suivant montre comment définir un rappel en ajoutant des balises.
// 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 le rendez‑vous EML en MSG avec corps HTML
Depuis la version 19.3, Aspose.Email offre la possibilité de convertir un rendez‑vous EML en MSG tout en conservant le corps HTML du rendez‑vous. Aspose.Email fournit un MapiConversionOptions.ForcedRtfBodyForAppointment propriété qui a une valeur par défaut de true. Lorsque la valeur de MapiConversionOptions.ForcedRtfBodyForAppointment défini sur true, le corps du rendez‑vous est converti au format RTF. Pour conserver le format du corps du rendez‑vous en HTML, définissez la valeur de MapiConversionOptions.ForcedRtfBodyForAppointment à false.
L’exemple suivant montre l’utilisation de MapiConversionOptions.ForcedRtfBodyForAppointment propriété pour conserver le format du corps du rendez‑vous en HTML.
// 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");
Définir manuellement l’état des éléments du calendrier MAPI
Définissez explicitement l’état d’un objet MAPI Calendar, en surchargeant le comportement par défaut. Cela permet un meilleur contrôle des états des événements de calendrier, notamment lors du traitement des demandes de réunion reçues. Par défaut, lorsqu’une réunion est créée, son état est MapiCalendarState.Meeting. Lorsqu’il est reçu dans la boîte de réception du destinataire, il passe automatiquement à MapiCalendarState.Received, et sa classe de message est mise à jour vers « IPM.Schedule.Meeting.Request ». En utilisant SetStateForced permet de définir manuellement l’état à Received, ce qui peut être utile pour préserver les informations de l’organisateur lors de l’enregistrement du calendrier sous forme de fichier MSG. Cependant, cela peut empêcher le transfert ou l’envoi répété correct de la réunion.
L’exemple de code ci‑dessous montre comment créer un MapiCalendar objet, assigner un organisateur, et définir explicitement son état à la fois Meeting et Received en utilisant SetStateForced. Il enregistre ensuite l’élément du calendrier sous forme de fichier .msg.
MapiCalendar appointment = new MapiCalendar(
"LAKE ARGYLE WA 6743",
"Appointment",
"This is a very important meeting :)",
new DateTime(2024, 5, 10, 12, 30, 0, DateTimeKind.Utc),
new DateTime(2024, 5, 10, 13, 30, 0, DateTimeKind.Utc));
appointment.Organizer = new MapiElectronicAddress
{
EmailAddress = "test@aaa.com",
DisplayName = "test display Name"
};
appointment.SetStateForced(MapiCalendarState.Meeting | MapiCalendarState.Received);
appointment.Save("appointment.msg", AppointmentSaveFormat.Msg);
Voir aussi
- Gérer les rendez‑vous — travailler avec les rendez‑vous iCalendar (ICS) et les demandes de réunion.
- Gestion des éléments de calendrier dans les fichiers PST — stocker et lire les éléments de calendrier à l’intérieur d’un PST.