如何使用Apache Commons Email将文件附加到HTML电子邮件
-
05-07-2019 - |
题
我正在使用 Apache Commons Email 1.1 ,我无法弄清楚如何将文件附加到HtmlEmail。如果我运行下面的代码,我会收到一封附带附件的电子邮件,但HTML邮件也会作为附件出现。
如果我不调用email.attach(),HTML消息就会如您所愿,但我需要HTML消息和附件。我错过了什么?
HtmlEmail email = new HtmlEmail();
email.setHostName("localhost");
email.addTo("test@mail.com", "Test");
email.setFrom("testapp@mail.com", "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();
解决方案
email.attach(new ByteArrayDataSource(pdfBytes, "application/pdf"),
"document.pdf", "Document description",
EmailAttachment.ATTACHMENT);
这适用于commons-email 1.1。
pdfBytes
应该是包含pdf文档字节的 byte []
。如果这不适合您,您可以尝试其他 DataSource
实现,但我不能保证它们能够工作(尽管它们应该)。
(上面的那个是 org.apache.commons.mail.ByteArrayDataSource
)
其他提示
请注意使用:
email.attach(new ByteArrayDataSource(pdfBytes, "application/pdf"),
"document.pdf", "Document description",
EmailAttachment.ATTACHMENT);
使用commons-email 1.1在 HtmlEmail
上导致生成的电子邮件将其消息(文本或html)作为附件包含在内。
切换到 MultiPartEmail
修复此问题。
我建议您尝试将当前版本的候选版本v1.2 RC2作为1.1(我猜您使用它)有一些HTML布局问题
我使用HtmlEmail#embed(URL,String)方法:
File pdf = new File(pdfPath);
email.embed(pdf.toURI().toURL(), pdf.getName)
在最新版本(1.5)中,以下代码适用于我
email.attach(new FileDataSource(attachmentFileObject), "AttachmentName", "Description");
不隶属于 StackOverflow