【问题标题】:Add attachment to mail from bytearrayoutputstream从 bytearrayoutputstream 向邮件添加附件
【发布时间】:2021-12-23 10:35:14
【问题描述】:

我正在尝试发送带有这样附件的电子邮件:

MimeMessageHelper message = new MimeMessageHelper(mimeMessage, false, CharEncoding.UTF_8);
InputStream is = new ByteArrayInputStream(baos.toByteArray());
message.addAttachment("facture.pdf",  new ByteArrayResource(IOUtils.toByteArray(is)));

我收到一个错误:

java.lang.IllegalStateException: 不在多部分模式 - 创建一个 适当的 MimeMessageHelper 通过一个构造函数接受 'multipart' 标志,如果您需要设置替代文本或添加内联 元素或附件。

有没有办法让它继续使用 addAttachment 方法?

【问题讨论】:

    标签: java jakarta-mail


    【解决方案1】:

    MimeMessageHelper 的文档看来,您只需要传递一个true 标志。

    MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, CharEncoding.UTF_8);
    

    【讨论】:

      【解决方案2】:

      您必须将多部分模式指定为构造函数的第二个参数。 multipart模式有多种选择:

      • MULTIPART_MODE_NO

      • MULTIPART_MODE_MIXED

      • MULTIPART_MODE_RELATED

      • MULTIPART_MODE_MIXED_RELATED

      通过传递 false,您设置了 ** MULTIPART_MODE_NO**,这不允许您插入附件。

      通过true,您将设置** MULTIPART_MODE_MIXED_RELATED**,在文档中是这样描述的:

      根据 MIME 规范,这可以说是最正确的 MIME 结构:众所周知,它可以在 Outlook、Outlook Express、Yahoo Mail 和 Lotus Notes 上正常工作。在 Mac Mail 上无法正常工作。如果您针对 Mac Mail 或在 Outlook 上遇到特定邮件问题,请考虑改用 MULTIPART_MODE_RELATED。

      一般而言,您可以使用此替代构造函数来选择最适合您的:

      public MimeMessageHelper(MimeMessage mimeMessage,
                           int multipartMode,
                           String encoding)
                    throws MessagingException
      

      不同之处在于要求整数约束(上述之一)而不是布尔值。

      【讨论】:

        猜你喜欢
        • 2011-02-03
        • 1970-01-01
        • 2023-03-21
        • 2013-11-19
        • 1970-01-01
        • 2010-11-13
        • 2016-07-28
        • 2019-05-05
        相关资源
        最近更新 更多