Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kapilgupta101292/92769d3e9f8e6444cb9dde5960473b1e to your computer and use it in GitHub Desktop.
Save kapilgupta101292/92769d3e9f8e6444cb9dde5960473b1e to your computer and use it in GitHub Desktop.
Java mail Create/Delete Appointment
public void sendOutlookMail() throws Exception {
String toEmail = "abc@xyz.com";
String fromEmail = "xyz@abc.com";
//register the text/calendar mime type
MimetypesFileTypeMap mimetypes = (MimetypesFileTypeMap) MimetypesFileTypeMap.getDefaultFileTypeMap();
mimetypes.addMimeTypes("text/calendar ics ICS");
//register the handling of text/calendar mime type
MailcapCommandMap mailcap = (MailcapCommandMap) MailcapCommandMap.getDefaultCommandMap();
mailcap.addMailcap("text/calendar;; x-java-content-handler=com.sun.mail.handlers.text_plain");
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.setSubject("Test");
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
Multipart multipart = new MimeMultipart("alternative");
BodyPart messageBodyPart = buildHtmlTextPart();
multipart.addBodyPart(messageBodyPart);
BodyPart calendarPart = buildCalendarPart();
multipart.addBodyPart(calendarPart);
message.setContent(multipart);
Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
private BodyPart buildHtmlTextPart() throws MessagingException {
MimeBodyPart descriptionPart = new MimeBodyPart();
//Note: even if the content is spcified as being text/html, outlook won't read correctly tables at all
// and only some properties from div:s. Thus, try to avoid too fancy content
String content = "<font size=\"2\"> simple meeting invitation</font >";
descriptionPart.setContent(content, "text/html; charset=utf-8");
return descriptionPart;
}
private BodyPart buildCalendarPart() throws Exception {
BodyPart calendarPart = new MimeBodyPart();
//create.ics
String calendarContent = "BEGIN:VCALENDAR\n"
+ "METHOD:REQUEST\n"
+ "PRODID:Microsoft Exchange Server 2010\n"
+ "VERSION:2.0\n"
+ "BEGIN:VTIMEZONE\n"
+ "TZID:India Standard Time\n"
+ "BEGIN:STANDARD\n"
+ "DTSTART:16010101T000000\n"
+ "TZOFFSETFROM:+0530\n"
+ "TZOFFSETTO:+0530\n"
+ "END:STANDARD\n"
+ "BEGIN:DAYLIGHT\n"
+ "DTSTART:16010101T000000\n"
+ "TZOFFSETFROM:+0530\n"
+ "TZOFFSETTO:+0530\n"
+ "END:DAYLIGHT\n"
+ "END:VTIMEZONE\n"
+ "BEGIN:VEVENT\n"
+ "ORGANIZER;CN=Test Sirion:MAILTO:xyz@abc.com\n"
+ "ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Kapil Gupta:MAILTO:abc.xyz.com\n"
+ "DESCRIPTION;LANGUAGE=en-US:\\n\n"
+ "UID:040000008200E00074C5B7101A82E00800000000908EB51F4E28D501000000000000000\n"
+ " 01000000000ED265B41C38B479A5315D1D23383D4\n"
+ "SUMMARY;LANGUAGE=en-US:New Meeting\n"
+ "DTSTART;TZID=India Standard Time:20190622T080000\n"
+ "DTEND;TZID=India Standard Time:20190622T083000\n"
+ "CLASS:PUBLIC\n"
+ "PRIORITY:5\n"
+ "DTSTAMP:20190621T105648Z\n"
+ "TRANSP:OPAQUE\n"
+ "STATUS:CONFIRMED\n"
+ "SEQUENCE:0\n"
+ "LOCATION;LANGUAGE=en-US:\n"
+ "X-MICROSOFT-CDO-APPT-SEQUENCE:0\n"
+ "X-MICROSOFT-CDO-OWNERAPPTID:-2091554845\n"
+ "X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE\n"
+ "X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY\n"
+ "X-MICROSOFT-CDO-ALLDAYEVENT:FALSE\n"
+ "X-MICROSOFT-CDO-IMPORTANCE:1\n"
+ "X-MICROSOFT-CDO-INSTTYPE:0\n"
+ "X-MICROSOFT-DONOTFORWARDMEETING:FALSE\n"
+ "X-MICROSOFT-DISALLOW-COUNTER:FALSE\n"
+ "X-MICROSOFT-LOCATIONS:[]\n"
+ "BEGIN:VALARM\n"
+ "DESCRIPTION:REMINDER\n"
+ "TRIGGER;RELATED=START:-PT15M\n"
+ "ACTION:DISPLAY\n"
+ "END:VALARM\n"
+ "END:VEVENT\n"
+ "END:VCALENDAR\n";
String calendarContent1 = "BEGIN:VCALENDAR\n"
+ "METHOD:CANCEL\n"
+ "PRODID:Microsoft Exchange Server 2010\n"
+ "VERSION:2.0\n"
+ "BEGIN:VTIMEZONE\n"
+ "TZID:India Standard Time\n"
+ "BEGIN:STANDARD\n"
+ "DTSTART:16010101T000000\n"
+ "TZOFFSETFROM:+0530\n"
+ "TZOFFSETTO:+0530\n"
+ "END:STANDARD\n"
+ "BEGIN:DAYLIGHT\n"
+ "DTSTART:16010101T000000\n"
+ "TZOFFSETFROM:+0530\n"
+ "TZOFFSETTO:+0530\n"
+ "END:DAYLIGHT\n"
+ "END:VTIMEZONE\n"
+ "BEGIN:VEVENT\n"
+ "ORGANIZER;CN=Test Sirion:MAILTO:xyz@abc.com\n"
+ "ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Kapil Gupta:MAILTO:abc.xyz.com\n"
+ "DESCRIPTION;LANGUAGE=en-US:\\n\n"
+ "UID:040000008200E00074C5B7101A82E00800000000908EB51F4E28D501000000000000000\n"
+ " 01000000000ED265B41C38B479A5315D1D23383D4\n"
+ "SUMMARY;LANGUAGE=en-US:Canceled: New Meeting\n"
+ "DTSTART;TZID=India Standard Time:20190622T080000\n"
+ "DTEND;TZID=India Standard Time:20190622T083000\n"
+ "CLASS:PUBLIC\n"
+ "PRIORITY:1\n"
+ "DTSTAMP:20190621T110026Z\n"
+ "TRANSP:TRANSPARENT\n"
+ "STATUS:CANCELLED\n"
+ "SEQUENCE:1\n"
+ "LOCATION;LANGUAGE=en-US:\n"
+ "X-MICROSOFT-CDO-APPT-SEQUENCE:1\n"
+ "X-MICROSOFT-CDO-OWNERAPPTID:-2091554845\n"
+ "X-MICROSOFT-CDO-BUSYSTATUS:FREE\n"
+ "X-MICROSOFT-CDO-INTENDEDSTATUS:FREE\n"
+ "X-MICROSOFT-CDO-ALLDAYEVENT:FALSE\n"
+ "X-MICROSOFT-CDO-IMPORTANCE:2\n"
+ "X-MICROSOFT-CDO-INSTTYPE:0\n"
+ "X-MICROSOFT-DONOTFORWARDMEETING:FALSE\n"
+ "X-MICROSOFT-DISALLOW-COUNTER:FALSE\n"
+ "END:VEVENT\n"
+ "END:VCALENDAR\n";
System.out.println(calendarContent);
System.out.println(calendarContent1);
calendarPart.addHeader("Content-Class", "urn:content-classes:calendarmessage");
// set calendar part as create.ics
// this code is commented while sending the delete request on the appointment.
calendarPart.setContent(calendarContent, "text/calendar;method=REQUEST");
// set calendar part as delete.ics
// commented while sending the meeting request
calendarPart.setContent(calendarContent1, "text/calendar;method=CANCEL");
return calendarPart;
}
@kannuVerma
Copy link

Hi, I want to open an outlook appointment page with some prefilled info like subject, message body which should popup on a button click in Java, but do not want to create the appointment through code. Can you help?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment