العمل مع عناصر تقويم Outlook
العمل مع MapiCalendar
Aspose.Email’s MapiCalendar يوفر الصف طرقًا وسمات لتعيين خصائص مختلفة لعنصر التقويم. يقدم هذا المقال نماذج شيفرة لـ:
إنشاء وحفظ عناصر التقويم
يعرض القسم البرمجي التالي كيفية إنشاء وحفظ عنصر تقويم بصيغة ICS.
// 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);
حفظ عنصر التقويم كملف MSG
يعرض القسم البرمجي التالي كيفية حفظ عنصر التقويم كملف MSG.
// 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);
تعيين معرف المنتج عند حفظ عنصر التقويم إلى صيغة ICS
الـ ProductIdentifier خاصية الـ MapiCalendarIcsSaveOptions يستخدم هذا الصف لحفظ عنصر تقويم MAPI إلى ملف iCalendar (ICS) مع الحفاظ على معلومات التاريخ والوقت الأصلية بالإضافة إلى معرف منتج مخصص. تحدد الخاصية المعرف الخاص بالمنتج الذي أنشأ كائن iCalendar.
يعرض مثال الشيفرة التالي كيفية العمل مع بيانات iCalendar (ICS) داخل كائن تقويم MAPI:
MapiCalendarIcsSaveOptions icsSaveOptions = new MapiCalendarIcsSaveOptions();
icsSaveOptions.setKeepOriginalDateTimeStamp(true);
icsSaveOptions.setProductIdentifier("Foo Ltd");
mapiCalendar.save("my.ics", icsSaveOptions);
إضافة تذكير مرئي إلى التقويم
يعرض القسم البرمجي التالي كيفية إضافة تذكير مرئي إلى التقويم.
// 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);
إضافة تذكير صوتي إلى التقويم
يعرض القسم البرمجي التالي كيفية إضافة تذكير صوتي إلى التقويم.
// 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);
إضافة/استرجاع المرفقات من ملفات التقويم
يعرض القسم البرمجي التالي كيفية إضافة/استرجاع المرفقات من ملفات التقويم.
// 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());
حالة المستلمين من طلب اجتماع
يعرض القسم البرمجي التالي كيفية الحصول على حالة المستلمين من طلب اجتماع.
// 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());
}
ضبط حالة موعد التقويم صراحةً
تتيح لك Aspose.Email ضبط حالة MapiCalendar الكائن صراحةً، متجاوزًا السلوك الافتراضي. الـ setStateForced توفر الطريقة تحكمًا أفضل في حالات أحداث التقويم، خصوصًا عند معالجة طلبات الاجتماعات المستلمة. بشكل افتراضي، عند إنشاء اجتماع، تكون حالته MapiCalendarState.Meeting. عند استلامه في صندوق الوارد للمستلم، يتغيّر تلقائيًا إلى MapiCalendarState.Received, ويتم تحديث فئة الرسالة الخاصة به إلى IPM.Schedule.Meeting.Request. باستخدام SetStateForced يسمح بتعيين الحالة يدويًا إلى Received، مما قد يكون مفيدًا للحفاظ على معلومات المنظم عند حفظ التقويم كملف MSG. ومع ذلك، قد يمنع هذا إعادة توجيه أو إعادة إرسال الاجتماع بشكل صحيح.
سيُساعدك مثال الشيفرة التالي على تنفيذ هذه الميزة:
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 من المنطقة الزمنية القياسية
يعرض القسم البرمجي التالي كيفية إنشاء MapiCalendarTimeZone من المنطقة الزمنية القياسية.
// 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");
ضبط تذكير باستخدام الموعد المُنشأ
يمكن إضافة تذكير عند إنشاء موعد. يمكن لهذه التنبيهات أن تُtrigger بناءً على معايير مختلفة مثل n دقيقة قبل بدء الجدول، أو التكرار n مرات بفواصل زمنية n. يمكن استخدام وسوم مختلفة لإنشاء هذه المشغلات في النص البرمجي المحاط بـ BEGIN:VALARM و END:VALARM داخل الموعد. هناك عدة تنويعات يمكن من خلالها ضبط التذكير على الموعد.
ضبط تذكير بإضافة وسوم
يظهر القسم البرمجي التالي كيفية ضبط تذكير بإضافة وسوم.
// 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");
تحويل موعد EML إلى MSG مع جسم HTML
منذ الإصدار 19.3، توفر Aspose.Email القدرة على تحويل موعد EML إلى MSG مع الحفاظ على جسم HTML للموعد. توفر Aspose.Email MapiConversionOptions.ForcedRtfBodyForAppointment الخاصية التي لها قيمة افتراضية true. عندما تكون قيمة MapiConversionOptions.ForcedRtfBodyForAppointment عند ضبطه على true، يتم تحويل جسم الموعد إلى صيغة RTF. للحفاظ على تنسيق جسم الموعد بصيغة HTML، عيّن قيمة MapiConversionOptions.ForcedRtfBodyForAppointment إلى false.
المثال التالي يوضح استخدام MapiConversionOptions.ForcedRtfBodyForAppointment خاصية للحفاظ على تنسيق جسم الموعد بصيغة HTML.
// 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");