Arbeiten mit Outlook-Kalenderelementen
Arbeiten mit MapiCalendar
von Aspose.Email MapiCalendar Klasse stellt Methoden und Attribute zum Setzen verschiedener Eigenschaften eines Kalenderelements bereit. Dieser Artikel bietet Code‑Beispiele für:
- Arbeiten mit MapiCalendar
- Kalenderelemente erstellen und speichern
- Kalenderelement als MSG speichern
- Anzeige‑Erinnerung zu einem Kalender hinzufügen
- Audio‑Erinnerung zu einem Kalender hinzufügen
- Anhänge aus Kalenderdateien hinzufügen/abrufen
- Status der Empfänger aus einer Besprechungsanfrage
- MapiCalendarTimeZone aus Standard‑Zeitzone erstellen
- Erinnerung mit dem erstellten Termin festlegen
- Termin‑EML nach MSG mit HTML-Body konvertieren
Kalenderelemente erstellen und speichern
Das folgende Code‑Snippet zeigt, wie Sie ein Kalenderelement im ICS‑Format erstellen und speichern.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "outlook/";
Calendar cal = Calendar.getInstance();
cal.set(2012, Calendar.OCTOBER, 2, 13, 0, 0);
Date startDate = cal.getTime();
cal.set(2012, Calendar.OCTOBER, 2, 14, 0, 0);
Date endDate = cal.getTime();
MapiCalendar calendar = new MapiCalendar("LAKE ARGYLE WA 6743",
"Appointment",
"This is a very important meeting :)",
startDate,
endDate);
calendar.save(dataDir + "CalendarItem_out.ics", AppointmentSaveFormat.Ics);
Kalenderelement als MSG speichern
Das folgende Code‑Snippet zeigt, wie Sie das Kalenderelement als MSG speichern.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
calendar.save(dataDir + "CalendarItemAsMSG_out.Msg", AppointmentSaveFormat.Msg);
Produkts‑ID beim Speichern eines Kalenderelements als ICS festlegen
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:
MapiCalendarIcsSaveOptions icsSaveOptions = new MapiCalendarIcsSaveOptions();
icsSaveOptions.setKeepOriginalDateTimeStamp(true);
icsSaveOptions.setProductIdentifier("Foo Ltd");
mapiCalendar.save("my.ics", icsSaveOptions);
Anzeige‑Erinnerung zu einem Kalender hinzufügen
Das folgende Code‑Snippet zeigt, wie Sie eine Anzeige‑Erinnerung zu einem Kalender hinzufügen.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "outlook/";
Calendar jCalendar = Calendar.getInstance();
jCalendar.add(Calendar.HOUR, 1);
Date startDate = jCalendar.getTime();
Date endDate = jCalendar.getTime();
MailAddressCollection attendees = new MailAddressCollection();
attendees.addItem(new MailAddress("attendee@domain.com", "Attendee"));
// Create Appointment
Appointment app = new Appointment("Home",
startDate,
endDate,
new MailAddress("organizer@domain.com", "Organizer"),
attendees);
MailMessage msg = new MailMessage();
msg.addAlternateView(app.requestApointment());
MapiMessage mapi = MapiMessage.fromMailMessage(msg);
MapiCalendar calendar = (MapiCalendar) mapi.toMapiMessageItem();
// Set calendar Properties
calendar.setReminderSet(true);
calendar.setReminderDelta(5); // 45 min before start of event
String savedFile = (dataDir + "calendarWithDisplayReminder.ics");
calendar.save(savedFile, AppointmentSaveFormat.Ics);
Audio‑Erinnerung zu einem Kalender hinzufügen
Das folgende Code‑Snippet zeigt, wie Sie eine Audio‑Erinnerung zu einem Kalender hinzufügen.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "outlook/";
Calendar jCalendar = Calendar.getInstance();
jCalendar.add(Calendar.HOUR, 1);
Date startDate = jCalendar.getTime();
Date endDate = jCalendar.getTime();
MailAddressCollection attendees = new MailAddressCollection();
attendees.addItem(new MailAddress("attendee@domain.com", "Attendee"));
Appointment app = new Appointment("Home",
startDate,
endDate,
new MailAddress("organizer@domain.com", "Organizer"),
attendees);
MailMessage msg = new MailMessage();
msg.addAlternateView(app.requestApointment());
MapiMessage mapi = MapiMessage.fromMailMessage(msg);
MapiCalendar cal = (MapiCalendar) mapi.toMapiMessageItem();
cal.setReminderSet(true);
cal.setReminderDelta(58); // 58 min before start of event
cal.setReminderFileParameter(dataDir + "Alarm01.wav");
String savedFile = dataDir + "calendarWithAudioReminder_out.ics";
cal.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.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "outlook/";
Calendar jCalendar = Calendar.getInstance();
jCalendar.add(Calendar.HOUR, 1);
Date startDate = jCalendar.getTime();
Date endDate = jCalendar.getTime();
String[] files = new String[3];
files[0] = "attachment_1.doc";
files[1] = "download.png";
files[2] = "Desert.jpg";
MailAddressCollection attendees = new MailAddressCollection();
attendees.addItem(new MailAddress("attendee@domain.com", "Attendee"));
Appointment app1 = new Appointment("Home",
startDate,
endDate,
new MailAddress("organizer@domain.com", "Organizer"),
attendees);
for (String file : files) {
app1.getAttachments().addItem(new Attachment(dataDir + file));
}
app1.save(dataDir + "appWithAttachments_out.ics", AppointmentSaveFormat.Ics);
Appointment app2 = Appointment.load(dataDir + "appWithAttachments_out.ics");
System.out.println(app2.getAttachments().size());
for (Attachment att : app2.getAttachments())
System.out.println(att.getName());
Status der Empfänger aus einer Besprechungsanfrage
Das folgende Code‑Snippet zeigt, wie Sie den Status der Empfänger aus einer Besprechungsanfrage abrufen.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String fileName = "outlook/test.msg";
MapiMessage message = MapiMessage.fromFile(fileName);
for (MapiRecipient recipient : message.getRecipients()) {
System.out.println(recipient.getRecipientTrackStatus());
}
Kalendertermin‑Status explizit festlegen
Aspose.Email ermöglicht das Setzen des Status eines MapiCalendar Objekt explizit, wodurch das Standardverhalten überschrieben wird. Die setStateForced Methode bietet bessere Kontrolle über den Status von Kalenderelementen, insbesondere beim Umgang mit empfangenen Besprechungsanfragen. Standardmäßig ist, wenn eine Besprechung erstellt wird, ihr Status MapiCalendarState.Meeting. Wenn es im Posteingang des Empfängers empfangen wird, ändert es sich automatisch zu MapiCalendarState.Received, und seine Nachrichtenklasse wird aktualisiert zu IPM.Schedule.Meeting.Request. Verwenden von SetStateForced ermöglicht das manuelle Setzen des Status auf Empfangen, was nützlich sein kann, um Organisatorinformationen beim Speichern des Kalenders als MSG‑Datei zu erhalten. Dies kann jedoch das korrekte Weiterleiten oder erneute Senden der Besprechung verhindern.
Das folgende Code‑Beispiel hilft Ihnen, diese Funktion zu implementieren:
Calendar c = Calendar.getInstance();
c.set(2024, Calendar.MAY, 10, 12, 30, 0);
Date startDate = c.getTime();
c.set(2024, Calendar.MAY, 10, 13, 30, 0);
Date endDate = c.getTime();
MapiCalendar appointment = new MapiCalendar(
"LAKE ARGYLE WA 6743",
"Appointment",
"This is a very important meeting :)",
startDate,
endDate);
MapiElectronicAddress organizer = new MapiElectronicAddress();
organizer.setEmailAddress("test@aaa.com");
organizer.setDisplayName("test display Name");
appointment.setOrganizer(organizer);
appointment.setStateForced(MapiCalendarState.Meeting | MapiCalendarState.Received);
appointment.save("appointment.msg", AppointmentSaveFormat.Msg);
MapiCalendarTimeZone aus Standard‑Zeitzone erstellen
Das folgende Code‑Snippet zeigt, wie Sie erstellen MapiCalendarTimeZone aus der Standard‑Zeitzone.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone("Eastern Standard Time");
Erinnerung mit dem erstellten Termin 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.
Eine Erinnerung durch Hinzufügen von Tags festlegen
Das folgende Code‑Snippet zeigt, wie Sie eine Erinnerung durch Hinzufügen von Tags festlegen.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();
long MIN_MS = 60 * 1000;
long HR_MS = 60 * MIN_MS;
long DAY_MS = 24 * HR_MS;
String location = "Meeting Location: Room 5";
Date startDate = getDate(1997, 3, 18, 18, 30, 00);
Date endDate = getDate(1997, 3, 18, 19, 30, 00);
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
attendees.addItem(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.setTrigger(new ReminderTrigger(getDate(1997, 3, 17, 13, 30, 0)));
audioReminder.setRepeat(4);
audioReminder.setDuration(new ReminderDuration(15 * MIN_MS));
audioReminder.setAction(ReminderAction.Audio);
ReminderAttachment attach = new ReminderAttachment(new URI("ftp://Host.com/pub/sounds/bell-01.aud"));
audioReminder.getAttachments().addItem(attach);
target.getReminders().addItem(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(-30 * MIN_MS);
displayReminder.setTrigger(new ReminderTrigger(dur, ReminderRelated.Start));
displayReminder.setRepeat(2);
displayReminder.setDuration(new ReminderDuration(15 * MIN_MS));
displayReminder.setAction(ReminderAction.Display);
displayReminder.setDescription("Breakfast meeting with executive team at 8:30 AM EST");
target.getReminders().addItem(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(-2 * DAY_MS);
emailReminder.setTrigger(new ReminderTrigger(dur1, ReminderRelated.Start));
ReminderAttendee attendee = new ReminderAttendee("john_doe@host.com");
emailReminder.getAttendees().addItem(attendee);
emailReminder.setAction(ReminderAction.Email);
emailReminder.setSummary("REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING");
emailReminder.setDescription("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.getAttachments().addItem(attach1);
target.getReminders().addItem(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.setTrigger(new ReminderTrigger(getDate(1998, 1, 1, 5, 0, 0)));
procReminder.setRepeat(23);
procReminder.setDuration(new ReminderDuration(1 * DAY_MS));
procReminder.setAction(ReminderAction.Procedure);
ReminderAttachment attach2 = new ReminderAttachment(new URI("ftp://Host.com/novo-procs/felizano.exe"));
procReminder.getAttachments().addItem(attach2);
target.getReminders().addItem(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.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "outlook/";
MailMessage mailMessage = MailMessage.load(dataDir + "TestAppointment.eml");
MapiConversionOptions conversionOptions = new MapiConversionOptions();
conversionOptions.setFormat(OutlookMessageFormat.Unicode);
// default value for ForcedRtfBodyForAppointment is true
conversionOptions.setForcedRtfBodyForAppointment(false);
MapiMessage mapiMessage = MapiMessage.fromMailMessage(mailMessage, conversionOptions);
if (mapiMessage.getBodyType() == BodyContentType.Html) {
System.out.println("Body Type: Html");
} else if (mapiMessage.getBodyType() == BodyContentType.Rtf) {
System.out.println("Body Type: Rtf");
}
mapiMessage.save(dataDir + "TestAppointment_out.msg");