2009-10-22 13 views
7

Używam Apache Commons Email 1.1 i nie mogę się dowiedzieć, jak dołączyć plik do HtmlEmail. Jeśli uruchomię poniższy kod, otrzymam wiadomość e-mail z załącznikiem, ale wiadomość w formacie HTML jest również załącznikiem.Jak dołączyć plik do wiadomości e-mail w formacie HTML za pomocą Apache Commons Email

Jeśli nie zadzwonię pod adres email.attach(), wiadomość HTML pojawi się tak, jak można się spodziewać, ale potrzebuję zarówno wiadomości HTML, jak i załącznika. czego mi brakuje?

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 .. nawiasem mówiąc, byłem przy użyciu Gmaila jako mojego klienta testowego. – delux247

+0

Czy próbowałeś wymusić typ zawartości, wykonując email.setContent (javax.mail.internet.MimeMultipart aMimeMultipart)? To prawdopodobnie jest zbędne, ale warte strzału – Bostone

+0

@ droidin-net Nie jestem pewien, czy rozumiem co masz na myśli. Chodzi mi o to, że głównym celem wiadomości e-mail dotyczących Apache było wyodrębnienie ciebie z rzeczy MimeMultipart. – delux247

Odpowiedz

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

ten współpracuje z commons- email 1.1.

pdfBytes powinien być byte[] zawierający bajty dokumentu PDF. Jeśli to ci nie odpowiada, możesz wypróbować inne implementacje DataSource, ale nie gwarantuję, że zadziałają (chociaż powinny).

(Jednej powyżej org.apache.commons.mail.ByteArrayDataSource)

3

Proponuję spróbować aktualny v1.2 Release Candidate RC2 jako 1,1 (Chyba, że ​​używasz) ma pewne problemy layout html

commons-email 1.2 RC2

4

Należy pamiętać, że przy użyciu:

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

na zasadzie HtmlEmail użyciu commons-maila 1.1 powoduje otrzymanej wiadomości e-mail, aby mieć swoje wiadomości (tekst lub html) dołączona jako Załącznik.

Naprawiono to przełączenie na MultiPartEmail.

0

używam HtmlEmail # embed (URL, String) metoda:

File pdf = new File(pdfPath); 
email.embed(pdf.toURI().toURL(), pdf.getName) 
Powiązane problemy