2009-10-22 51 views
7

Estoy usando Apache Commons Email 1.1 y no puedo encontrar la manera de adjuntar un archivo a un correo electrónico Html. Si ejecuto el código a continuación, recibo un correo electrónico con un archivo adjunto, pero el mensaje HTML también aparece como un archivo adjunto.Cómo adjuntar un archivo a un correo electrónico HTML utilizando Apache Commons Correo electrónico

Si no llamo a email.attach() el mensaje HTML aparece como es de esperar, pero necesito que aparezcan el mensaje HTML y el archivo adjunto. ¿Qué me estoy perdiendo?

HtmlEmail email = new HtmlEmail(); 
    email.setHostName("localhost"); 
    email.addTo("[email protected]", "Test"); 
    email.setFrom("[email protected]", "Test App"); 
    email.setSubject("Test message"); 
    email.setHtmlMsg("<div style='font-size: 20px; color: green;'>This is html email</div>"); 

    EmailAttachment attachment = new EmailAttachment(); 
    attachment.setPath(pdfPath); 
    attachment.setDisposition(EmailAttachment.ATTACHMENT); 
    email.attach(attachment); 

    email.send(); 
+0

Ah .. por cierto, yo estaba usando Gmail como mi cliente de prueba. – delux247

+0

¿Intentaste forzar el tipo de contenido haciendo email.setContent (javax.mail.internet.MimeMultipart aMimeMultipart)? Probablemente sea redundante, pero vale la pena intentarlo – Bostone

+0

@ droidin-net No estoy seguro de entender lo que quieres decir. Pensé que el objetivo del correo electrónico de apache commons era abstraerte de las cosas de MimeMultipart. – delux247

Respuesta

12
email.attach(new ByteArrayDataSource(pdfBytes, "application/pdf"), 
     "document.pdf", "Document description", 
     EmailAttachment.ATTACHMENT); 

Esto funciona con commons- correo electrónico 1.1.

pdfBytes debe ser un byte[] que contiene los bytes del documento pdf. Si eso no te conviene, puedes probar otras implementaciones de DataSource, pero no puedo garantizar que funcionen (aunque deberían).

(La de arriba es org.apache.commons.mail.ByteArrayDataSource)

3

Le sugiero que pruebe la corriente RC2 versión candidata v1.2 como 1.1 (supongo que se utiliza) tiene algunos problemas de diseño HTML

commons-email 1.2 RC2

4

Tenga en cuenta que el uso de:

email.attach(new ByteArrayDataSource(pdfBytes, "application/pdf"), 
     "document.pdf", "Document description", 
     EmailAttachment.ATTACHMENT); 

en un HtmlEmail usando Commons-mail 1.1 hace que el correo electrónico resultante tenga su mensaje (de texto o html) encerrada como una adjunto archivo.

Cambiando a MultiPartEmail solucionado esto.

0

uso el HtmlEmail # Insertar (URL, String):

File pdf = new File(pdfPath); 
email.embed(pdf.toURI().toURL(), pdf.getName) 
Cuestiones relacionadas