2016-12-01 106 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 

這會要求一個整數約束(上面一個)不同,而不是一個布爾值。