enviar - Mejores prácticas: envío de correos electrónicos multiparte de javamail mime y gmail
javamail props (1)
Resuelto Parece que según la especificación MIME multiparte, el orden de las partes es importante. Deben agregarse en orden de baja fidelidad a alta fidelidad. Entonces parece que GMail sigue la especificación y usa la última parte. En mi caso, los tenía HTML, Text. Acabo de cambiar el orden a Texto, HTML y Gmail lo renderiza correctamente ...
es decir
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");
multiPart.addBodyPart(textPart); // <-- first
multiPart.addBodyPart(htmlPart); // <-- second
message.setContent(multiPart);
¡Gracias por la ayuda!
Tengo una aplicación Tomcat que necesita enviar correos electrónicos de confirmación, etc. He codificado el emailer con Javamail (mail.jar) para enviar mensajes de texto de múltiples partes / html. Basé el código en los ejemplos de Java EE. Estoy usando SMTP MTA en el servidor local.
Funciona muy bien. En Outlook, veo la versión HTML. Si lo arrastro a la carpeta de spam de Outlook, veo la versión de texto. Entonces lo interpreto como diciendo que funciona.
Sin embargo, si veo los correos electrónicos en Gmail, solo veo la versión de texto. Sé que el HTML está allí (de ahí es de donde lo obtuvo Outlook). Pero Gmail no lo muestra ... Tengo muchos correos electrónicos de otros sistemas que se muestran como HTML en Gmail.
¿Alguien puede indicarme las especificaciones que muestran lo que me estoy perdiendo? ¿Hay encabezados especiales que necesito crear?
Gracias
El código se ve así:
Message message = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");
try {
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");
multiPart.addBodyPart(htmlPart);
multiPart.addBodyPart(textPart);
message.setContent(multiPart);
if(from != null){
message.setFrom(new InternetAddress(from));
}else
message.setFrom();
if(replyto != null)
message.setReplyTo(new InternetAddress[]{new InternetAddress(replyto)});
else
message.setReplyTo(new InternetAddress[]{new InternetAddress(from)});
InternetAddress[] toAddresses = { new InternetAddress(to) };
message.setRecipients(Message.RecipientType.TO, toAddresses);
message.setSubject(subject);
message.setSentDate(new Date());
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
System.out.println("Error: "+e.getMessage());
} catch (MessagingException e) {
e.printStackTrace();
System.out.println("Error: "+e.getMessage());
} finally {
System.out.println("Email sent!");
}