envío enviar correos correo autenticar archivo adjunto java email calendar javamail ical4j

enviar - javamail



Enviar invitación de calendario por correo electrónico con java (1)

Estoy tratando de enviar invitaciones de calendario por correo electrónico con java. El destinatario recibe el correo electrónico, pero en lugar de mostrarle una invitación para aceptar o rechazar, el evento se agrega automáticamente a su calendario.

Estoy construyendo el evento / invitación con ical4j.jar

private Calendar getInvite(Session session) { Calendar calendar = new Calendar(); calendar.getProperties().add(Version.VERSION_2_0); calendar.getProperties().add(Method.REQUEST); VEvent event = new VEvent( new DateTime(sesion.getStartDate()), new DateTime(sesion.getEndDate()), session.getName()); event.getProperties().add(Priority.MEDIUM); event.getProperties().add(Clazz.PUBLIC); try { UidGenerator ug = new UidGenerator("uidGen"); Uid uid = ug.generateUid(); event.getProperties().add(uid); } catch (SocketException e) { // Log things } for (Participant participant : session.getParticipants()) { Attendee attendee = new Attendee(URI.create("mailto:" + participant.getEmail())); attendee.getParameters().add(Role.OPT_PARTICIPANT); attendee.getParameters().add(new Cn(participant.getName())); attendee.getParameters().add(PartStat.NEEDS_ACTION); event.getProperties().add(attendee); } calendar.getComponents().add(event); return calendar; }

Y así es como envío el correo electrónico:

public void sendEmail(String fromMail, String toMail, String subject, String text, net.fortuna.ical4j.model.Calendar calendar) { try { Session session = Session.getInstance(getMailProperties(), new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(getUser(), getPassword()); } }); MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.setHeader("Content-Transfer-Encoding:", "7bit"); Address address = new InternetAddress(fromMail); mimeMessage.setFrom(address); mimeMessage.setSentDate(Calendar.getInstance().getTime()); mimeMessage.setRecipients(Message.RecipientType.TO, toMail); mimeMessage.setSubject(subject); Calendar cal = Calendar.getInstance(); mimeMessage.setSentDate(cal.getTime()); Multipart multipart = new MimeMultipart("alternative"); // First part - HTML readable text MimeBodyPart msgHtml = new MimeBodyPart(); msgHtml.setContent(text, "text/html; charset=UTF-8"); multipart.addBodyPart(msgHtml); if (calendar != null) { // Another part for the calendar invite MimeBodyPart invite = new MimeBodyPart(); invite.setHeader("Content-Class", "urn:content- classes:calendarmessage"); invite.setHeader("Content-ID", "calendar_message"); invite.setHeader("Content-Disposition", "inline"); invite.setContent(calendar.toString(), "text/calendar"); multipart.addBodyPart(invite); } mimeMessage.setContent(multipart); Transport.send(mimeMessage); } catch (Exception e) { // Log things } }

Pero cuando recibo el correo electrónico (en gmail), no veo ninguna invitación, el evento se agrega automáticamente a mi calendario. Solo puedo aceptar o rechazar haciendo clic en el evento en el calendario.

Intenté simplemente enviar la invitación, entonces lo que sucede es que recibo un correo electrónico con un archivo adjunto ics.

¿Qué me estoy perdiendo?