2014-06-13 67 views
0

這是我的文件附加到郵件代碼:Java郵件附件越來越損壞

Multipart mp=new MimeMultipart("mixed"); 
BodyPart mbody=new MimeBodyPart(); 
mbody.setHeader("Content-Type", "text/html; charset=us-ascii"); 
mbody.setHeader("Content-Transfer-Encoding","7bit"); 
mbody.setContent(content2, "text/html");             
mp.addBodyPart(mbody);           
for(File file:f){  
    BodyPart mbody2=new MimeBodyPart(); 
    DataSource ds=new FileDataSource(file.getAbsolutePath()); 
    mbody2.setDataHandler(new DataHandler(ds)); 
    mbody2.setFileName(ds.getName()); 
    mbody2.setHeader("Content-Type", "multipart/mixed"); 
    mbody2.setHeader("Content-Transfer-Encoding", "base64");       
    mp.addBodyPart(mbody2);       
} 
m.setContent(mp); 

content2的HTML內容我在電子郵件中嵌入,和我從一個ArrayList f添加文件。

這裏的問題是,儘管文件被附加,我收到的電子郵件罰款,我無法打開附件,因爲數據已損壞。這發生在我嘗試附加的所有文件中,例如jpegs,pdf,電子表格,word文檔和txt文件。

我在這裏讀到:https://community.oracle.com/thread/1589120,這可能發生,因爲JavaMail使用編碼來破壞文件的二進制數據,並添加mbody2.setHeader("Content-Transfer-Encoding", "base64");應該可以解決問題,但這對我不起作用。

關於什麼可能是錯誤的任何想法?

感謝

回答

1

時間爲一些調試...

首先,刪除所有來電的setHeader的;其中有些是錯誤的,沒有一個是必要的。

接下來,確定問題是在發送端還是在接收端。嘗試多個郵件閱讀器,看他們是否都有附件問題。

嘗試發送純文本附件。他們是否也損壞?

發佈protocol trace顯示當您發送帶簡單附件失敗的簡單消息時發生的情況,因此我們可以看到消息是否正確構建。

你使用的是什麼版本的JavaMail?

你用什麼郵件閱讀器查看附件?

+0

取出標題做了訣竅。 你能解釋爲什麼或如何標題搞砸了電子郵件? 謝謝。 –

+0

您正在重寫附件的Content-Type,該附件應該適用於您附加的任何類型的文件,以表明它是多部分。它當然不是;它包含**在多部分。其他人只是不必要的,因爲JavaMail將(幾乎總是)爲您選擇正確的內容類型和編碼。 –