从bytearrayoutputstream添加邮件附件

时间:2016-12-01 15:50:21

标签: java javamail

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

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方法?

2 个答案:

答案 0 :(得分:3)

MimeMessageHelper的文档中可以看出,您只需要传递true标记。

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

答案 1 :(得分:1)

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

  • 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

通过要求整数约束(上述之一)而不是布尔值来区别。