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?
Está creando un nuevo calendario, por eso el calendario se agrega automáticamente. Consulte la documentación https://github.com/ical4j/ical4j/wiki/Examples#Creating_a_new_calendar pruebe "Crear una reunión de cuatro horas de duración" y vea si todavía tiene un problema.