Verwalten von Outlook-Kalenderelementen
Dieser Artikel behandelt Outlook MapiCalendar Kalenderobjekte, die als MSG gespeichert wurden. Um kalendarbasierte iCalendar‑Termine (ICS) und Besprechungsanfragen zu bearbeiten, siehe Termine verwalten; um Kalenderobjekte in einer PST zu speichern und zu lesen, siehe Verwalten von Kalenderelementen in PST‑Dateien.
Aspose.Email MapiCalendar Die Klasse stellt Methoden und Attribute zum Festlegen verschiedener Eigenschaften eines Kalenderelements bereit. Dieser Abschnitt enthält Codebeispiele für:
- Kalenderelemente erstellen und speichern
- Kalenderelemente als MSG-Dateien speichern
- Produkt‑IDs für MAPI‑Kalenderelemente in ICS speichern
- Gesamtzahl der Ereignisse abrufen
- Anzeige‑Erinnerungen hinzufügen
- Audio‑Erinnerungen hinzufügen
- Anhänge aus Kalenderdateien hinzufügen/abrufen
- Status der Empfänger in Besprechungsanfragen prüfen
- MAPI‑Kalenderzeitzone aus Standardzeitzone erstellen
- Erinnerungen für Termine festlegen
- Termin‑EML nach MSG mit HTML-Body konvertieren
- Den Zustand von MAPI‑Kalenderobjekten manuell festlegen
Kalenderelemente erstellen und speichern
Das folgende Code‑Snippet zeigt, wie Sie ein Kalenderelement im ICS‑Format erstellen und speichern.
// 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);
Kalenderelemente als MSG-Dateien speichern
Das folgende Code‑Snippet zeigt, wie Sie das Kalenderelement als MSG speichern.
calendar.Save(dataDir + "CalendarItemAsMSG_out.Msg", AppointmentSaveFormat.Msg);
Produkt‑IDs für MAPI‑Kalenderelemente in ICS speichern
Die ProductIdentifier Eigenschaft des MapiCalendarIcsSaveOptions Klasse wird verwendet, um ein MAPI‑Kalenderelement in einer iCalendar‑(ICS‑)Datei zu speichern und dabei ursprüngliche Datums‑ und Zeitinformationen sowie eine benutzerdefinierte Produkt‑Kennung zu erhalten. Die Eigenschaft gibt die Kennung des Produkts an, das das iCalendar‑Objekt erstellt hat.
Das folgende Code‑Beispiel zeigt, wie man mit iCalendar‑(ICS‑)Daten innerhalb eines MAPI‑Kalenderobjekts arbeitet:
var icsSaveOptions = new MapiCalendarIcsSaveOptions
{
KeepOriginalDateTimeStamp = true,
ProductIdentifier = "Foo Ltd"
};
mapiCalendar.Save("my.ics", icsSaveOptions);
Gesamtzahl der Ereignisse abrufen
Die CalendarReader Klasse ermöglicht die mühelose Handhabung von Kalenderevents. Die folgenden Eigenschaften und eine Methode erlauben das Arbeiten mit mehreren Events:
- CalendarReader.Count – Die Count‑Eigenschaft der CalendarReader‑Klasse ermöglicht das Abrufen der Anzahl von Vevent‑Komponenten (Ereignissen) im Kalender, sodass die Gesamtschrittzahl der Ereignisse leichter nachverfolgt werden kann.
- CalendarReader.IsMultiEvents – Diese Eigenschaft bestimmt, ob der Kalender mehrere Ereignisse enthält. Sie liefert einen booleschen Wert, der angibt, ob mehr als ein Ereignis vorhanden ist, und hilft dabei, Kalender mit einzelnen oder mehreren Ereignissen zu identifizieren.
- CalendarReader.Method – Die Eigenschaft Method ermittelt den iCalendar‑Methodentyp, der dem Kalenderobjekt zugeordnet ist. Sie gibt den Methodentyp zurück, z. B. „REQUEST“, „PUBLISH“ oder „CANCEL“, und liefert wertvolle Hinweise zum Zweck des Kalenders.
- CalendarReader.Version – Gibt die Version von iCalendar zurück.
- CalendarReader.LoadAsMultiple() Diese Methode ermöglicht das Laden einer Liste von Ereignissen aus einem Kalender, der mehrere Ereignisse enthält. Sie gibt eine Liste von Appointment‑Objekten zurück, wodurch ein einfacher Zugriff und die Verarbeitung jedes einzelnen Ereignisses ermöglicht wird.
Das folgende Codebeispiel demonstriert, wie Sie diese Funktionen in Ihrem Projekt implementieren können:
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();
Anzeige‑Erinnerungen hinzufügen
Das folgende Code‑Snippet zeigt, wie Sie eine Anzeige‑Erinnerung zu einem Kalender hinzufügen.
// 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);
Audio‑Erinnerungen hinzufügen
Das folgende Code‑Snippet zeigt, wie Sie eine Audio‑Erinnerung zu einem Kalender hinzufügen.
// 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);
Anhänge aus Kalenderdateien hinzufügen/abrufen
Das folgende Code‑Snippet zeigt, wie Sie Anhänge aus Kalenderdateien hinzufügen/abrufen.
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);
Status der Empfänger in Besprechungsanfragen prüfen
Das folgende Code‑Snippet zeigt, wie Sie den Status der Empfänger aus einer Besprechungsanfrage anzeigen.
MapiMessage message = MapiMessage.FromFile(fileName);
foreach (MapiRecipient recipient in message.Recipients)
{
Console.WriteLine(recipient.RecipientTrackStatus);
}
MAPI‑Kalenderzeitzone aus Standardzeitzone erstellen
Das folgende Code‑Snippet zeigt, wie Sie MapiCalendarTimeZone aus einer Standardzeitzone erstellen.
MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);
Erinnerungen für Termine festlegen
Eine Erinnerung kann beim Erstellen eines Termins hinzugefügt werden. Diese Alarme können basierend auf verschiedenen Kriterien ausgelöst werden, z. B. n Minuten vor Beginn des Zeitplans, Wiederholung n‑mal in n‑Abständen. Unterschiedliche Tags können verwendet werden, um diese Auslöser im Skript zu erstellen, das von BEGIN:VALARM bis END:VALARM innerhalb eines Termins eingeschlossen ist. Es gibt verschiedene Varianten, wie die Erinnerung für einen Termin festgelegt werden kann.
Tags hinzufügen, um Erinnerungen festzulegen
Das folgende Code‑Snippet zeigt, wie Sie eine Erinnerung durch Hinzufügen von Tags festlegen.
// 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");
Termin-EML nach MSG mit HTML-Body konvertieren
Seit Version 19.3 bietet Aspose.Email die Möglichkeit, Termin-EML nach MSG zu konvertieren und dabei den HTML-Body des Termins beizubehalten. Aspose.Email stellt eine MapiConversionOptions.ForcedRtfBodyForAppointment Eigenschaft, die einen Standardwert von true hat. Wenn der Wert von MapiConversionOptions.ForcedRtfBodyForAppointment ist auf true gesetzt, wird der Terminkörper in das RTF-Format konvertiert. Um das Format des Terminkörpers im HTML-Format beizubehalten, setzen Sie den Wert von MapiConversionOptions.ForcedRtfBodyForAppointment auf false.
Das folgende Beispiel demonstriert die Verwendung von MapiConversionOptions.ForcedRtfBodyForAppointment Eigenschaft, um das Format des Terminkörpers im HTML-Format beizubehalten.
// 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");
Zustand von MAPI‑Kalenderelementen manuell festlegen
Den Zustand eines MAPI‑Kalenderobjekts explizit festlegen und dabei das Standardverhalten überschreiben. Dies ermöglicht eine bessere Kontrolle über die Zustände von Kalenderereignissen, insbesondere beim Umgang mit empfangenen Besprechungsanfragen. Standardmäßig ist der Zustand einer erstellten Besprechung MapiCalendarState.Meeting. Wenn es im Posteingang des Empfängers empfangen wird, ändert es sich automatisch zu MapiCalendarState.Received, und seine Nachrichtenklasse wird auf „IPM.Schedule.Meeting.Request“ aktualisiert. Verwendung von SetStateForced ermöglicht das manuelle Setzen des Zustands auf Received, was nützlich sein kann, um Organisatorinformationen beim Speichern des Kalenders als MSG‑Datei zu erhalten. Dies kann jedoch das ordnungsgemäße Weiterleiten oder erneute Senden der Besprechung verhindern.
Das folgende Codebeispiel demonstriert, wie man ein MapiCalendar Objekt, einen Organisator zuweisen und dessen Zustand explizit auf beide setzen Meeting und Received unter Verwendung von SetStateForced. Anschließend speichert es das Kalenderelement als .msg‑Datei.
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);
Siehe auch
- Termine verwalten — mit iCalendar‑Terminen (ICS) und Besprechungsanfragen arbeiten.
- Verwalten von Kalenderelementen in PST‑Dateien — Kalenderobjekte in einer PST speichern und lesen.