ทำงานกับรายการปฏิทิน Outlook

ทำงานกับ MapiCalendar

ของ Aspose.Email 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);

ตั้งค่า ID ผลิตภัณฑ์เมื่อบันทึกรายการปฏิทินเป็นไฟล์ 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");

ตั้งการเตือนด้วยการนัดหมายที่สร้างขึ้น

สามารถเพิ่มการเตือนเมื่อสร้างการนัดหมายได้ การเตือนเหล่านี้สามารถทำงานตามเกณฑ์ต่าง ๆ เช่น ก่อนเริ่มกำหนดเวลา 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");

แปลง Appointment EML เป็น MSG ด้วยเนื้อหา HTML

ตั้งแต่เวอร์ชัน 19.3, Aspose.Email มีความสามารถในการแปลง Appointment 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");