Java 从bytearrayoutputstream向邮件添加附件

Java 从bytearrayoutputstream向邮件添加附件,java,jakarta-mail,Java,Jakarta Mail,我正在尝试发送一封带有以下附件的电子邮件: MimeMessageHelper message = new MimeMessageHelper(mimeMessage, false, CharEncoding.UTF_8); InputStream is = new ByteArrayInputStream(baos.toByteArray()); message.addAttachment("facture.pdf", new ByteArrayResource(IOUtils.toByte

我正在尝试发送一封带有以下附件的电子邮件:

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:不在多部分模式下-创建 通过采用 如果需要设置替代文本或添加内联文本,“multipart”标志 元素或附件


有没有办法让addAttachment方法保持有效?

的文档中显示,您只需传递一个
true
标志

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

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

  • 多部分\u模式\u编号

  • 多部分模式混合

  • 多部分模式相关

  • 多部分\u模式\u混合\u相关

通过传递false您正在设置**多部分模式\否**,这不允许您插入附件

通过传递true您将设置**多部分模式\混合\相关**,这在文档中是这样描述的:

根据MIME规范,这可以说是最正确的MIME结构:它可以在Outlook、Outlook Express、Yahoo Mail和Lotus Notes上正常工作。无法在Mac Mail上正常工作。如果您针对Mac邮件或在Outlook上使用特定邮件进行体验问题,请考虑使用MultPuthMoDeOffic相关。p> 通常,您可以使用此替代构造函数选择最适合自己的:

public MimeMessageHelper(MimeMessage mimeMessage,
                     int multipartMode,
                     String encoding)
              throws MessagingException
其不同之处在于要求使用整数约束(上面的一个约束)而不是布尔约束