如何使用Apache Commons Email将文件附加到HTML电子邮件

时间:2009-10-22 22:16:56

标签: java email apache-commons-email

我正在使用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();

6 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:4)

请注意使用:

email.attach(new ByteArrayDataSource(pdfBytes, "application/pdf"),
      "document.pdf", "Document description",
       EmailAttachment.ATTACHMENT);
使用commons-email 1.1在HtmlEmail

导致生成的电子邮件将其消息(文本或html)作为附件包含在内。

切换到MultiPartEmail解决此问题。

答案 2 :(得分:3)

我建议您尝试将当前版本的候选版本v1.2 RC2作为1.1(我猜您使用它)有一些HTML布局问题

commons-email 1.2 RC2

答案 3 :(得分:0)

我使用HtmlEmail#embed(URL,String)方法:

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

答案 4 :(得分:0)

在最新版本(1.5)上,以下代码对我有用

<div id="parent">
  <p id="child">Hey!! I'm not moving anymore!</p>
</div>

答案 5 :(得分:0)

您可以在Java中使用上播和下播。

  1. HtmlEmail扩展了MultiPartEmail,并且attacch方法返回 MultiPartEmail类。
  2. HtmlEmail将转换为MultiPartEmail,然后使用 tempEmail.attach(附件)。
  3. 然后,MultiPartEmail将转换回HtmlEmail类。

    HtmlEmail email;
    MultiPartEmail tempEmail;
    
    // HtmlEmail -> MultiPartEmail
    tempEmail = new HtmlEmail();
    
    // Add a attachment
    EmailAttachment attachment = new EmailAttachment();
    attachment.setURL(new URL(fileURL));
    attachment.setDisposition(EmailAttachment.ATTACHMENT);
    attachment.setName(MimeUtility.encodeText(fileName));
    tempEmail = tempEmail.attach(attachment);
    
    // MultiPartEmail -> HtmlEmail
    email = (HtmlEmail)tempEmail;