2009-10-22 7 views
7

J'utilise Apache Commons Email 1.1 et je n'arrive pas à comprendre comment attacher un fichier à un HtmlEmail. Si je cours le code ci-dessous, je reçois un email avec une pièce jointe, mais le message HTML apparaît également comme une pièce jointe.Comment attacher un fichier à un email HTML en utilisant Apache Commons Email

Si je n'appelle pas email.attach(), le message HTML arrive comme prévu, mais j'ai besoin à la fois du message HTML et de la pièce jointe. Qu'est-ce que je rate?

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

Oh .. par ailleurs, j'utilisais gmail comme mon client de test. – delux247

+0

Avez-vous essayé de forcer le type de contenu en faisant email.setContent (javax.mail.internet.MimeMultipart aMimeMultipart)? C'est probablement redondant mais ça vaut le coup – Bostone

+0

@ droidin-net Je ne suis pas sûr de comprendre ce que vous voulez dire. Je pensais que tout le but de l'email d'apache commons était de vous faire abstraction des choses de MimeMultipart. – delux247

Répondre

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

cela fonctionne avec Communes- email 1.1.

pdfBytes doit être un byte[] contenant les octets du document pdf. Si cela ne vous convient pas, vous pouvez essayer d'autres implémentations DataSource, mais je ne peux pas garantir qu'elles fonctionneraient (bien qu'elles le devraient).

(celle ci-dessus est org.apache.commons.mail.ByteArrayDataSource)

3

Je vous suggère d'essayer la RC2 v1.2 release candidate actuelle comme 1.1 (je suppose que vous utilisez que) a quelques problèmes de mise en page html

commons-email 1.2 RC2

4

Notez que l'utilisation:

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

sur un HtmlEmail utilisant commons-email 1.1 provoque l'e-mail résultant d'avoir son message (texte ou html) jointe en attachement.

Le passage à MultiPartEmail a corrigé ce problème.

0

J'utilise le HtmlEmail # Embed méthode (URL, String):

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