2013-01-15 66 views
0

我使用JavaMail得到消息,當時我得到的消息,我有: com.sun.mail.util.BASE64DecoderStream,JAVAMAIL的base64解碼

我知道這是多消息的一部分,在消息源我有

Content-Type: image/png; name=index_01.png 

內容傳輸編碼:的base64

如何編碼這個消息?

編輯: 我有代碼:

else if (mbp.getContent() instanceof BASE64DecoderStream){ 
         InputStream is = null; 
         ByteArrayOutputStream os = null; 

          is = mbp.getInputStream(); 
          os = new ByteArrayOutputStream(512); 
          int c = 0; 
          while ((c = is.read()) != -1) { 
           os.write(c); 
          } 



          System.out.println(os.toString()); 

        } 

這代碼返回奇怪的字符串,例如: RA的EXIF II * ??????????? ?˙ě?Ducky ??????)

回答

0

Sun的base 64編碼器位於可選軟件包中,可以隨時在沒有警告的情況下移動或重命名,也可能在其他Java運行時中丟失,也可能禁用訪問這些軟件包。最好不要依賴它。

我會說,使用Base45Apache Commons而不是,應該這樣做。希望你可以重建和修復源代碼。

0

你是什麼期待當你讀取圖像部分的內容?圖像以編碼格式存儲在消息中,但是在將字節返回給您之前,JavaMail正在解碼數據。如果將字節存儲在文件中,則可以使用許多圖像查看/編輯應用程序顯示圖像。如果要用Java程序顯示它們,則需要使用java.awt.image包中的(例如)API將字節轉換爲適當的Java Image對象。

0

com.sun.mail.util.BASE64DecoderStream是平臺相關的。你不能依賴那種總是處理base64解碼的類。

相反了JavaMail API的支持已經爲你解碼:

// part is instanceof javax.mail.Part 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
part.getDataHandler().writeTo(bos); 

String decodedContent = bos.toString()