Как прикрепить файл к письму в формате HTML с помощью Apache Commons Email
-
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);
это работает с обыкновенной электронной почтой 1.1.
pdfBytes
должен быть byte []
, содержащим байты документа pdf. Если это вас не устраивает, вы можете попробовать другие реализации DataSource
, но я не могу гарантировать, что они будут работать (хотя они должны). Р>
(выше приведен org.apache.commons.mail.ByteArrayDataSource
)
Другие советы
Обратите внимание, что с помощью:
email.attach(new ByteArrayDataSource(pdfBytes, "application/pdf"),
"document.pdf", "Document description",
EmailAttachment.ATTACHMENT);
в HtmlEmail
, использующем commons-email 1.1, приводит к тому, что в полученном электронном письме его сообщение (текстовое или 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");