我正在尝试发送一封附件的电子邮件:
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方法?
答案 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
通过要求整数约束(上述之一)而不是布尔值来区别。