【问题标题】:How to attach a file to an HTML email using Apache Commons Email如何使用 Apache Commons Email 将文件附加到 HTML 电子邮件
【发布时间】:2010-12-09 06:42:23
【问题描述】:

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

【问题讨论】:

  • 哦.. 顺便说一句,我使用 gmail 作为我的测试客户端。
  • 您是否尝试通过执行 email.setContent(javax.mail.internet.MimeMultipart aMimeMultipart) 来强制内容类型?这可能是多余的,但值得一试
  • @droidin-net 我不确定我理解你的意思。我虽然 apache commons 电子邮件的全部意义在于将您从 MimeMultipart 的东西中抽象出来。

标签: java email apache-commons-email


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    注意使用:

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

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

    切换到MultiPartEmail 解决了这个问题。

    【讨论】:

      【解决方案3】:

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

      commons-email 1.2 RC2

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

           email.attach(new FileDataSource(attachmentFileObject), "AttachmentName", "Description");
          

          【讨论】:

            【解决方案6】:

            您可以在 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;
              

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-04-24
              • 2010-12-19
              • 1970-01-01
              • 1970-01-01
              • 2021-10-09
              • 1970-01-01
              • 1970-01-01
              • 2015-07-19
              相关资源
              最近更新 更多