2016-11-10 72 views
-1

我們使用JavaMail外文字符電子郵件發送到電子郵件獲取電子郵件帳戶時使用&中國,日文字符發送最近我們有過電子郵件。越來越怪異輸出試圖解析與使用JavaMail

例如,這裏的一些日本內容:

限定クリエイティブツールのコレクションを含む高速寫真編集ソフトウェア。 

而且它可能會得到輸出是這樣的:

<div>=1B$B$"=1B(B =1B$B$$=1B(B =1B$B$&=1B(B =1B$B$(=1B(B =1B$B$*=1B(B =1B$B= 
$+=1B(B =1B$B$-=1B(B =1B$B$/=1B(B =1B$B$1=1B(B =1B$B$3=1B(B =1B$B$5=1B(B = 
=1B$B$7=1B(B =1B$B$9=1B(B =1B$B$;=1B(B =1B$B$=3D=1B(B =1B$B$,=1B(B =1B$B$.= 
=1B(B =1B$B$0=1B(B =1B$B$2=1B(B =1B$B$4=1B(B =1B$B$Q=1B(B =1B$B$T=1B(B =1B$= 
B$W=1B(B =1B$B$Z=1B(B =1B$B$]=1B(B</div> 

而且content-type通常是text/html; charset=UTF-8

我們正在使用writeTo方法來獲取所有的標題和內容。

我試着做以下,但它沒有工作:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
m.writeTo(baos); 
pm.setUnProcessedMessage(baos.toString("UTF-8")); //Here I am explicitly stating the encoding 

而且,我相信這個問題可能是因爲我們使用的是舊版本的JavaMail的(1.5.0)。

我們在這裏可以做些什麼來處理外來字符?

回答

1

使用writeTo方法可爲您提供郵件的MIME編碼內容。這聽起來像你想解碼內容,你應該使用getContent或getInputStream方法。 getContent方法將返回一個可以直接使用的Unicode字符的字符串。 getInputStream方法將返回一個字符串,其字符編碼由charset參數指定;你需要用Reader來包裝它以獲得Unicode字符。

如果您還想要標題(例如,將它們與消息內容一起顯示),則應使用getSubject,getRecipients等方法,它們將再次返回解碼的內容。您可以使用getHeader方法獲取其他標題,但您需要使用MimeUtility方法自己解碼內容。