Trabalhando com Compromissos
Carregar e Salvar um Compromisso no formato ICS
A Classe Appointment no Aspose.Email para Java pode ser usada para carregar um compromisso no formato ICS, bem como para criar um novo compromisso e salvá-lo em um disco no formato ICS. Neste artigo, primeiro criamos um compromisso e o salvamos em um disco no formato ICS e depois o carregamos.
Carregar um Compromisso no formato ICS
Para carregar um compromisso no formato ICS, os seguintes passos são necessários:
- Crie uma instância da Classe Appointment.
- Chame o método Load() fornecendo o caminho do arquivo ICS.
- Leia qualquer propriedade para obter qualquer informação do compromisso (arquivo ICS).
Os seguintes trechos de código mostram como carregar um compromisso no formato ICS.
Criar um Compromisso e Salvar em Disco no formato ICS
Os seguintes passos são necessários para criar um compromisso e salvá-lo no formato ICS.
- Crie uma instância da Classe Appointment e inicialize-a com este construtor.
- Passe os seguintes argumentos no construtor acima
- Participantes
- Descrição
- Data de Término
- Localização
- Organizador
- Data de Início
- Resumo
- Data de Criação
- Data de Última Modificação
- Chame o método Save() e especifique o nome do arquivo e o formato nos argumentos.
O compromisso pode ser aberto no Microsoft Outlook ou em qualquer programa que possa carregar um arquivo ICS. Se o arquivo for aberto no Microsoft Outlook, ele adicionará automaticamente o compromisso ao calendário do Outlook.
Os seguintes trechos de código mostram como criar e salvar um compromisso em um disco no formato ICS.
Salvar Compromissos no formato MSG
Aspose.Email torna possível salvar compromissos diretamente em arquivos .msg. As seguintes classes públicas estão disponíveis para personalizar o processo de salvamento de compromissos:
- Classe AppointmentMsgSaveOptions com opções adicionais para salvar compromissos no formato msg.
- Classe AppointmentIcsSaveOptions com opções adicionais para salvar compromissos no formato ics. Ela foi adicionada para substituir o IcsSaveOptions obsoleto.
O exemplo de código abaixo mostra como carregar um compromisso de um arquivo e, em seguida, salvá-lo em dois formatos diferentes: .ics e .msg.
Appointment appointment = Appointment.load("fileName");
appointment.save("fileName.ics", new AppointmentIcsSaveOptions());
appointment.save("fileName.msg", new AppointmentMsgSaveOptions());
Criar um Compromisso com Conteúdo HTML
É uma prática comum usar o cabeçalho X-ALT-DESC no formato iCalendar (RFC 5545). Trata-se de uma propriedade estendida que fornece uma descrição alternativa legível por humanos de um item ou evento de calendário. Este cabeçalho é frequentemente utilizado para incluir uma representação em texto simples ou HTML da descrição do evento, o que pode ser útil para compatibilidade com softwares de calendário mais antigos ou para fornecer uma versão simplificada da descrição. Em casos em que a descrição primária não é suportada ou exibida corretamente pelo aplicativo de calendário do destinatário, o cabeçalho X-ALT-DESC é usado para fornecer uma descrição alternativa do evento. Ele permite que o remetente inclua diferentes representações da descrição do evento para garantir melhor compatibilidade e acessibilidade entre diferentes softwares de calendário e plataformas. Para criar um compromisso com conteúdo HTML, defina a propriedade HtmlDescription como ‘true’. Tente o seguinte exemplo de código que demonstra como criar e definir um objeto de compromisso com detalhes e configurações específicas, incluindo a data, hora, localização, organizador, participantes e uma descrição formatada:
Date startDate = new Date();
Appointment appointment = new Appointment("Bygget 83",
startDate, // data de início
addHours(startDate, 1), // data de término
new MailAddress("TintinStrom@from.com", "Tintin Strom"), // organizador
MailAddressCollection.to_MailAddressCollection(
new MailAddress("AinaMartensson@to.com", "Aina Martensson"))); // participante
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\"\">Oi, estou feliz em convidá-lo para nossa festa.</p>\n"
+ " </body>\n"
+ " </html>");
Criar uma Solicitação de Compromisso em Rascunho
Para salvar um compromisso no modo rascunho, a Propriedade Method da Classe Appointment deve ser definida como Publicar. O exemplo de código a seguir demonstra o uso dessa propriedade como exemplo.
// 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"); |
Criação de Compromisso em Rascunho a partir de Texto
// 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"); |
Adicionar e Remover Anexos de Itens de Calendário
Aspose.Email fornece uma coleção de anexos que pode ser usada para adicionar e recuperar anexos associados a itens de calendário. Este artigo mostra como:
- Criar e adicionar anexos a um Objeto Classe Appointment.
- Recuperar informações sobre anexos de um compromisso.
- Extrair anexos de um compromisso.
// 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()); | |
} |
Formatando Compromissos
Os exemplos de programação abaixo demonstram como usar a Classe AppointmentFormattingOptions para formatar texto e HTML.
Exemplo de Programação - Formatação de Texto
// 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)); |
Exemplo de Programação - Formatação 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)); |
Ler Múltiplos Eventos de um Arquivo 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()); | |
} |
Escrever Múltiplos Eventos de um Arquivo 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(); | |
} |
Definir o Status dos Participantes dos Convidados do Compromisso
A API Aspose.Email para .NET permite definir o status dos convidados de compromissos ao formular uma mensagem de resposta. Isso adiciona a propriedade PARTSTAT ao arquivo 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); |
Personalizar o Identificador do Produto para iCalendar
A API Aspose.Email para Java permite obter ou definir o identificador do produto que criou o objeto iCalendar.
Como contornar a Validação de Endereço ao tentar Carregar Compromissos
A API Aspose.Email para Java permite contornar o erro de validação de e-mail definindo a opção IgnoreSmtpAddressCheck no objeto AppointmentLoadOptions e passando-o na chamada de carregamento.
AppointmentLoadOptions lo = new AppointmentLoadOptions();
lo.setIgnoreSmtpAddressCheck(true);
Appointment appointment = Appointment.load("app.ics", lo);