9

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

6 回答 6

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

这适用于 commons-email 1.1。

pdfBytes应该是一个byte[]包含 pdf 文档的字节。如果这不适合您,您可以尝试其他DataSource实现,但我不能保证它们会起作用(尽管它们应该)。

(上图是org.apache.commons.mail.ByteArrayDataSource

于 2010-01-20T22:06:11.893 回答
4

请注意,使用:

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

HtmlEmail使用 commons-email 1.1 时,会导致生成的电子邮件将其消息(文本或 html)作为附件包含在内。

切换到MultiPartEmail固定的这个。

于 2011-02-08T08:53:32.853 回答
3

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

公共电子邮件 1.2 RC2

于 2009-10-22T23:43:05.600 回答
0

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

File pdf = new File(pdfPath);
email.embed(pdf.toURI().toURL(), pdf.getName)
于 2013-10-24T07:43:02.720 回答
0

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

 email.attach(new FileDataSource(attachmentFileObject), "AttachmentName", "Description");
于 2018-06-30T18:58:03.377 回答
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;
    
于 2020-04-20T02:35:27.333 回答