Работа с назначениями
Загрузка и сохранение назначения в формате ICS
Класс Appointment в Aspose.Email для Java может использоваться для загрузки назначения в формате ICS, а также для создания нового назначения и его сохранения на диск в формате ICS. В этой статье мы сначала создадим назначение и сохраним его на диск в формате ICS, а затем загрузим его.
Загрузка назначения в формате ICS
Для загрузки назначения в формате ICS необходимо выполнить следующие шаги:
- Создать экземпляр класса Appointment.
- Вызвать метод Load() с указанием пути к файлу ICS.
- Прочитать любое свойство, чтобы получить информацию о назначении (файл ICS).
Следующие фрагменты кода показывают, как загрузить назначение в формате ICS.
Создание назначения и сохранение на диск в формате ICS
Для создания назначения и его сохранения в формате ICS необходимо выполнить следующие шаги.
- Создать экземпляр класса Appointment и инициализировать его с помощью этого конструктора.
- Передать следующие аргументы в указанный выше конструктор
- Участники
- Описание
- Дата окончания
- Место
- Организатор
- Дата начала
- Краткое содержание
- Дата создания
- Дата последнего изменения
- Вызвать метод Save() и указать имя файла и формат в аргументах.
Назначение может быть открыто в Microsoft Outlook или любой программе, которая может загрузить файл ICS. Если файл открыт в Microsoft Outlook, он автоматически добавляет назначение в календарь Outlook.
Следующие фрагменты кода показывают, как создать и сохранить назначение на диск в формате ICS.
Сохранение назначений в формате MSG
Aspose.Email позволяет сохранять назначения непосредственно в .msg файлы. Доступны следующие общедоступные классы для настройки процесса сохранения назначений:
- Класс AppointmentMsgSaveOptions с дополнительными опциями для сохранения назначений в формате msg.
- Класс AppointmentIcsSaveOptions с дополнительными опциями для сохранения назначения в формате ics. Он был добавлен для замены устаревшего IcsSaveOptions.
Пример кода ниже показывает, как загрузить назначение из файла, а затем сохранить его в двух различных форматах: .ics и .msg.
Appointment appointment = Appointment.load("fileName");
appointment.save("fileName.ics", new AppointmentIcsSaveOptions());
appointment.save("fileName.msg", new AppointmentMsgSaveOptions());
Создание назначения с HTML-содержимым
Распространенной практикой является использование заголовка X-ALT-DESC в формате iCalendar (RFC 5545). Это расширенное свойство, которое предоставляет альтернативное описание календарного элемента или события в формате, удобном для чтения человеком. Этот заголовок часто используется для включения текстового или HTML представления описания события, что может быть полезно для совместимости со старым календарным программным обеспечением или для предоставления упрощенной версии описания. В случаях, когда основное описание не поддерживается или отображается неправильно в календарном приложении получателя, заголовок X-ALT-DESC используется для предоставления альтернативного описания события. Это позволяет отправителю включать различные представления описания события для обеспечения лучшей совместимости и доступности между различными календарными программами и платформами. Чтобы создать назначение с HTML-содержимым, установите свойство HtmlDescription в ‘true’. Попробуйте следующий пример кода, который демонстрирует, как создать и определить объект назначения с конкретными деталями и настройками, включая дату, время, место, организатора, участников и отформатированное описание:
Date startDate = new Date();
Appointment appointment = new Appointment("Bygget 83",
startDate, // дата начала
addHours(startDate, 1), // дата окончания
new MailAddress("TintinStrom@from.com", "Tintin Strom"), // организатор
MailAddressCollection.to_MailAddressCollection(
new MailAddress("AinaMartensson@to.com", "Aina Martensson"))); // участник
appointment.setHtmlDescription("<html>\n"
+ " <style type=\"\"text/css\"\">\n"
+ " .text {\n"
+ " font-family:'Comic Sans MS';\n"
+ " font-size:16px;\n"
+ " }\n"
+ " </style>\n"
+ " <body>\n"
+ " <p class=\"\"text\"\">Привет, я рад пригласить вас на нашу вечеринку.</p>\n"
+ " </body>\n"
+ " </html>");
Создание черновика запроса на назначение
Чтобы сохранить назначение в режиме черновика, свойство Method класса Appointment должно быть установлено на Publish. Следующий пример кода демонстрирует использование этого свойства в качестве примера.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
String sender = "test@gmail.com"; | |
String recipient = "test@email.com"; | |
MailMessage message = new MailMessage(sender, recipient, "", ""); | |
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); | |
calendar.set(2016, Calendar.NOVEMBER, 1, 0, 0, 0); | |
Date startDate = calendar.getTime(); | |
calendar.set(2016, Calendar.DECEMBER, 1); | |
Date endDate = calendar.getTime(); | |
MailAddressCollection attendees = new MailAddressCollection(); | |
attendees.addMailAddress(new MailAddress("attendee_address@aspose.com", "Attendee")); | |
//WeeklyRecurrencePattern expected = new WeeklyRecurrencePattern(3); | |
Appointment app = new Appointment("", startDate, endDate, new MailAddress("organizer_address@aspose.com", "Organizer"), attendees); | |
/* | |
* Appointment app = new Appointment("Appointment Location", | |
* "Appointment Summary", "Appointment Description", startDate, endDate, | |
* new MailAddress("organizer_address@aspose.com", "Organizer"), | |
* attendees, expected); | |
*/ | |
//Set the Appointment as Draft | |
app.setMethod(AppointmentMethodType.Publish); | |
message.addAlternateView(app.requestApointment()); | |
MapiMessage msg = MapiMessage.fromMailMessage(message); | |
// Save the appointment as draft. | |
msg.save(dataDir + "appointment-draft.msg"); |
Создание черновика назначения из текста
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
String ical = "BEGIN:VCALENDAR\r\nMETHOD:PUBLISH\r\nPRODID:-//Aspose Ltd//iCalender Builder (v3.0)//EN\r\nVERSION:2.0\r\nBEGIN:VEVENT\r\nATTENDEE;CN=test@gmail.com:mailto:test@gmail.com\r\nDTSTART:20130220T171439\r\nDTEND:20130220T174439\r\nDTSTAMP:20130220T161439Z\r\nEND:VEVENT\r\nEND:VCALENDAR"; | |
String sender = "test@gmail.com"; | |
String recipient = "test@email.com"; | |
MailMessage message = new MailMessage(sender, recipient, "", ""); | |
AlternateView av = AlternateView.createAlternateViewFromString(ical, new ContentType("text/calendar")); | |
message.getAlternateViews().addItem(av); | |
MapiMessage msg = MapiMessage.fromMailMessage(message); | |
// Save the appointment as draft. | |
msg.save(dataDir + "DraftAppointment.msg"); |
Добавление и удаление вложений из календарных элементов
Aspose.Email предоставляет коллекцию вложений, которую можно использовать для добавления и извлечения вложений, связанных с календарными элементами. Эта статья показывает, как:
- Создать и добавить вложения к объекту класса Appointment.
- Извлечь информацию о вложениях из назначения.
- Извлечь вложения из назначения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
// The path to the resource directory. | |
String dataDir = Utils.getSharedDataDir(AddAndRetrieveAttachmentFromCalendarItems.class) + "email/"; | |
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); | |
calendar.set(2016, Calendar.NOVEMBER, 1, 0, 0, 0); | |
Date startDate = calendar.getTime(); | |
calendar.set(2016, Calendar.DECEMBER, 1); | |
Date endDate = calendar.getTime(); | |
MailAddressCollection attendees = new MailAddressCollection(); | |
attendees.addMailAddress(new MailAddress("attendee_address@domain.com", "Attendee")); | |
WeeklyRecurrencePattern expected = new WeeklyRecurrencePattern(3); | |
Appointment app = new Appointment("Appointment Location", "Appointment Summary", "Appointment Description", startDate, endDate, new MailAddress("organizer_address@domain.com", "Organizer"), | |
attendees, expected); | |
//Attach a file from disc to this appointment | |
File file = new File(dataDir + "sample.xlsx"); | |
FileInputStream fis = new FileInputStream(file); | |
Attachment att = new Attachment(fis, file.getName()); | |
app.getAttachments().addItem(att); | |
fis.close(); | |
String savedFile = "appWithAttachments.ics"; | |
app.save(dataDir + savedFile, AppointmentSaveFormat.Ics); | |
Appointment app2 = Appointment.load(dataDir + savedFile); | |
System.out.println("Total Attachments: " + app2.getAttachments().size()); | |
for (int i = 0; i < app2.getAttachments().size(); i++) { | |
att = app2.getAttachments().get_Item(i); | |
System.out.println(att.getName()); | |
//Save the attachment to disc | |
att.save(dataDir + att.getName()); | |
} |
Форматирование назначений
Ниже приведены примеры программирования, которые демонстрируют, как использовать класс AppointmentFormattingOptions для форматирования текста и HTML.
Пример программирования - Форматирование текста
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
Appointment appointment = Appointment.load(dataDir + "test.ics"); | |
AppointmentFormattingOptions formattingOptions = new AppointmentFormattingOptions(); | |
formattingOptions.setLocationFormat("Where: {0}"); | |
formattingOptions.setTitleFormat("Subject: {0}"); | |
formattingOptions.setDescriptionFormat("\r\n*~*~*~*~*~*~*~*~*~*\r\n{0}"); | |
System.out.println(appointment.getAppointmentText(formattingOptions)); |
Пример программирования - Форматирование HTML
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
Appointment appointment = Appointment.load(dataDir + "test.ics"); | |
AppointmentFormattingOptions formattingOptions = AppointmentFormattingOptions.createAsHtml(); | |
formattingOptions.setLocationFormat("<FONT SIZE=2 FACE=\"Arial\"><b>Where: {0}</b></FONT><BR>"); | |
formattingOptions.setTitleFormat("<FONT SIZE=2 FACE=\"Arial\"><b>Subject: {0}</b></FONT><BR>"); | |
formattingOptions.setDescriptionFormat("<P><FONT SIZE=2 FACE=\"Arial\">-----------<br><i>{0}</i></FONT></P>"); | |
System.out.println(appointment.getAppointmentText(formattingOptions)); |
Чтение нескольких событий из файла ICS
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
String dataDir = Utils.getSharedDataDir(DisplayEmailInformation.class) + "email/"; | |
List<Appointment> appointments = new ArrayList<Appointment>(); | |
CalendarReader reader = new CalendarReader(dataDir + "US-Holidays.ics"); | |
while (reader.nextEvent()) | |
{ | |
appointments.add(reader.getCurrent()); | |
} | |
System.out.println("Number of events read: " + appointments.size()); | |
//Process appointments loaded from events | |
//Reading events from a specific index | |
appointments = new ArrayList<Appointment>(); | |
AppointmentLoadOptions options = new AppointmentLoadOptions(); | |
options.setEventIndex(4); | |
reader = new CalendarReader(dataDir + "US-Holidays.ics", options); | |
//start reading from 4th appointment... | |
while (reader.nextEvent()) | |
{ | |
appointments.add(reader.getCurrent()); | |
} |
Запись нескольких событий из файла ICS
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
IcsSaveOptions saveOptions = new IcsSaveOptions(); | |
saveOptions.setAction(AppointmentAction.Create); | |
CalendarWriter writer = new CalendarWriter("WirteMultipleEventsToICS_out.ics", saveOptions); | |
//Set the start and end date of meeting | |
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); | |
calendar.set(2018, Calendar.JUNE, 19, 19, 0, 0); //19 Jan, 2015 - 1900 | |
Date startDate = calendar.getTime(); | |
calendar.set(2018, Calendar.JUNE, 19, 20, 0, 0); | |
Date endDate = calendar.getTime(); | |
MailAddressCollection attendees = new MailAddressCollection(); | |
attendees.addItem(new MailAddress("recepientEmail@gmail.com")); | |
try { | |
for (int i = 0; i < 10; i++) { | |
//create Appointment instance | |
Appointment app = new Appointment("Room 112", //location | |
startDate, //start time | |
endDate, //end time | |
new MailAddress("organizer@domain.com"), //organizer | |
attendees //attendee | |
); | |
app.setDescription("Test body " + i); | |
app.setSummary("Test summary:" + i); | |
writer.write(app); | |
} | |
} finally { | |
writer.dispose(); | |
} |
Установка статуса участников назначений
Aspose.Email для .NET API позволяет установить статус участников назначений при формировании ответа. Это добавляет свойство PARTSTAT в файл ICS.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
String location = "Room 5"; | |
java.util.Calendar c = java.util.Calendar.getInstance(); | |
c.set(2011, 11, 10, 10, 12, 11); | |
Date startDate = c.getTime(); | |
c.set(2012, 10, 13, 13, 11, 12); | |
Date endDate = c.getTime(); | |
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer"); | |
MailAddressCollection attendees = new MailAddressCollection(); | |
MailAddress attendee1 = new MailAddress("bbb@bmail.com", "First attendee"); | |
MailAddress attendee2 = new MailAddress("ccc@cmail.com", "Second attendee"); | |
attendee1.setParticipationStatus(ParticipationStatus.Accepted); | |
attendee2.setParticipationStatus(ParticipationStatus.Declined); | |
attendees.addMailAddress(attendee1); | |
attendees.addMailAddress(attendee2); | |
Appointment target = new Appointment(location, startDate, endDate, organizer, attendees); |
Настройка идентификатора продукта для iCalendar
Aspose.Email для Java API позволяет получить или установить идентификатор продукта, который создал объект iCalendar.
Как избежать проверки адреса при попытке загрузить назначения
Aspose.Email для Java API позволяет обойти ошибку проверки электронной почты, установив опцию IgnoreSmtpAddressCheck на объекте AppointmentLoadOptions и передав его в вызов загрузки.
AppointmentLoadOptions lo = new AppointmentLoadOptions();
lo.setIgnoreSmtpAddressCheck(true);
Appointment appointment = Appointment.load("app.ics", lo);