Làm việc với các mục Lịch Outlook

Làm việc với MapiCalendar

Aspose.Email MapiCalendar lớp cung cấp các phương thức và thuộc tính để đặt các thuộc tính khác nhau của một mục lịch. Bài viết này cung cấp các mẫu mã cho:

Tạo và Lưu các mục Lịch

Đoạn mã mẫu dưới đây cho bạn thấy cách tạo và lưu một mục lịch ở định dạng 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);

Lưu mục Lịch dưới dạng MSG

Đoạn mã mẫu dưới đây cho bạn thấy cách lưu mục lịch dưới dạng 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);

Đặt ID sản phẩm khi lưu mục Lịch sang ICS

Cái ProductIdentifier thuộc tính của MapiCalendarIcsSaveOptions lớp được sử dụng để lưu một mục lịch MAPI vào tệp iCalendar (ICS) giữ lại thông tin ngày và giờ gốc cũng như một định danh sản phẩm tùy chỉnh. Thuộc tính này chỉ định định danh cho sản phẩm đã tạo đối tượng iCalendar.

Mẫu mã dưới đây cho thấy cách làm việc với dữ liệu iCalendar (ICS) trong một đối tượng lịch MAPI:

MapiCalendarIcsSaveOptions icsSaveOptions = new MapiCalendarIcsSaveOptions();
icsSaveOptions.setKeepOriginalDateTimeStamp(true);
icsSaveOptions.setProductIdentifier("Foo Ltd");

mapiCalendar.save("my.ics", icsSaveOptions);

Thêm lời nhắc hiển thị vào lịch

Đoạn mã mẫu dưới đây cho bạn thấy cách thêm lời nhắc hiển thị vào lịch.

// 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);

Thêm lời nhắc âm thanh vào lịch

Đoạn mã mẫu dưới đây cho bạn thấy cách thêm lời nhắc âm thanh vào lịch.

// 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);

Thêm/Lấy tệp đính kèm từ các tệp lịch

Đoạn mã mẫu dưới đây cho bạn thấy cách thêm/lấy các tệp đính kèm từ các tệp lịch.

// 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());

Trạng thái người nhận từ yêu cầu họp

Đoạn mã mẫu dưới đây cho bạn thấy cách lấy trạng thái của người nhận từ yêu cầu họp.

// 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());
}

Đặt trạng thái cuộc hẹn Lịch một cách rõ ràng

Aspose.Email cho phép bạn đặt trạng thái của một MapiCalendar đối tượng một cách rõ ràng, ghi đè hành vi mặc định. The setStateForced phương pháp cung cấp kiểm soát tốt hơn đối với trạng thái sự kiện lịch, đặc biệt khi xử lý các yêu cầu họp đã nhận. Mặc định, khi một cuộc họp được tạo, trạng thái của nó là MapiCalendarState.Meeting. Khi được nhận trong hộp thư đến của người nhận, nó tự động chuyển thành MapiCalendarState.Received, và lớp tin nhắn của nó được cập nhật thành IPM.Schedule.Meeting.Request. Sử dụng SetStateForced cho phép đặt thủ công trạng thái thành Received, điều này có thể hữu ích để giữ thông tin người tổ chức khi lưu lịch dưới dạng tệp MSG. Tuy nhiên, điều này có thể ngăn việc chuyển tiếp hoặc gửi lại cuộc họp một cách đúng đắn.

Mẫu mã sau sẽ giúp bạn triển khai tính năng này:

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);

Tạo MapiCalendarTimeZone từ Múi giờ chuẩn

Đoạn mã mẫu dưới đây cho bạn thấy cách tạo MapiCalendarTimeZone từ Múi giờ chuẩn.

// 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");

Đặt lời nhắc với Cuộc hẹn đã tạo

Một lời nhắc có thể được thêm vào khi tạo một cuộc hẹn. Các báo động này có thể kích hoạt dựa trên các tiêu chí khác nhau như n phút trước khi lịch bắt đầu, lặp lại n lần với khoảng thời gian n. Các thẻ khác nhau có thể được sử dụng để tạo các trình kích hoạt này trong đoạn script được bao quanh bởi BEGIN:VALARM và END:VALARM trong một cuộc hẹn. Có nhiều biến thể để đặt lời nhắc cho một cuộc hẹn.

Đặt lời nhắc bằng cách thêm thẻ

Đoạn mã mẫu dưới đây cho bạn thấy cách đặt lời nhắc bằng cách thêm thẻ.

// 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");

Chuyển đổi Appointment EML sang MSG với thân HTML

Kể từ phiên bản 19.3, Aspose.Email cung cấp khả năng chuyển đổi Appointment EML sang MSG đồng thời giữ lại phần thân HTML của cuộc hẹn. Aspose.Email cung cấp một MapiConversionOptions.ForcedRtfBodyForAppointment thuộc tính có giá trị mặc định là true. Khi giá trị của MapiConversionOptions.ForcedRtfBodyForAppointment được đặt thành true, nội dung cuộc hẹn sẽ được chuyển sang định dạng RTF. Để giữ định dạng nội dung cuộc hẹn ở dạng HTML, đặt giá trị của MapiConversionOptions.ForcedRtfBodyForAppointment thành false.

Ví dụ sau đây minh họa việc sử dụng MapiConversionOptions.ForcedRtfBodyForAppointment thuộc tính để giữ định dạng nội dung cuộc hẹn ở dạng 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");