2011-03-07 21 views
51

Tengo que enviar un archivo HTML por correo electrónico pero no como archivo adjunto.cómo enviar correo electrónico HTML

Message simpleMessage = new MimeMessage(mailSession); 
try { 
    fromAddress = new InternetAddress(from); 
    toAddress = new InternetAddress(to); 

} catch (AddressException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

try { 
    simpleMessage.setFrom(fromAddress); 
    simpleMessage.setRecipient(RecipientType.TO, toAddress); 

    simpleMessage.setSubject(subject); 
    simpleMessage.setText(text); 

    Transport.send(simpleMessage); 
} catch (MessagingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Está enviando el correo electrónico simplemente con un mensaje de texto. Quiero enviar contenido HTML que se almacena en otro archivo, pero no como adjunto

+3

Realmente debería [aceptar algunas respuestas a sus preguntas] (http://stackoverflow.com/faq#howtoask). – dkarp

Respuesta

104

No te upCast su MimeMessage a Message:

MimeMessage simpleMessage = new MimeMessage(mailSession); 

Entonces, cuando se desea establecer el cuerpo del mensaje, ya sea llamada

simpleMessage.setText(text, "utf-8", "html"); 

o llame

simpleMessage.setContent(text, "text/html; charset=utf-8"); 

Si prefiere usar un juego de caracteres que no sea utf-8, sustitúyalo en el lugar apropiado.

JavaMail tiene una capa adicional, inútil de abstracción que a menudo deja que la celebración de clases como Multipart, Message, y Address, todos los cuales tienen mucha menos funcionalidad que las subclases reales (MimeMultipart, MimeMessage, y InternetAddress) que en realidad están construye ...

+0

Estoy usando el código en cuestión con 'simpleMessage.setContent (text," text/html; charset = utf-8 ");' para configurar el contenido, pero al hacerlo, cada parte del contenido que tengo un signo de interrogación '=' se convierte a '= 3D', lo que impide que las propiedades HTML se configuren correctamente, ¿alguna idea de por qué? – mohamnag

+1

@mohamnag Probablemente notarás que el mensaje resultante tiene un encabezado que dice 'Content-Transfer-Encoding: quoted-printable'. (Esto es probable porque está incluyendo texto no ASCII en su parte HTML y al correo electrónico no le gusta el contenido no ASCII). El destinatario del mensaje deberá transferir y decodificar el contenido del mensaje para convertir esos '= 3D' vuelve a '=' s. Intenta usar 'MimeMessage.getInputStream' en lugar de' MimeMessage.getContentStream' en el lado del destinatario. – dkarp

+0

@dkrap gracias por mencionarlo, estaba ignorando la codificación de transferencia y el HTML resultante no se mostraba correctamente. – mohamnag

Cuestiones relacionadas