2016-12-01 101 views
1

我试图用附件的电子邮件这样的邮寄:添加附件从bytearrayoutputstream

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,该构造函数采用 “多部分”标志。

有没有办法让它工作保持addAttachment方法?

回答

2

看来从MimeMessageHelper的文件,你只需要通过一个true标志。

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

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

  • MULTIPART_MODE_NO

  • MULTIPART_MODE_MIXED

  • MULTIPART_MODE_RELATED

  • MULTIPART_MODE_MIXED_RELATED

通过传递false您正在设置** MULTIPART_MODE_NO **,它不允许您插入附件。

通过传递真正您将设置** ** MULTIPART_MODE_MIXED_RELATED,这是在文档中这样描述:

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

一般来说,你可以使用这种替代构造选择最适合你:

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

这会要求一个整数约束(上面一个)不同,而不是一个布尔值。