2016-11-10 1 views
-1

Wir Javamail verwenden E-Mails von E-Mail-Konten zu holen & in letzter Zeit haben wir mit chinesischem, japanischen Zeichen gesendet hatten E-Mails.seltsamen Ausgang bekommen, wenn E-Mail mit fremden Zeichen zu analysieren versuchen, Javamail mit

Zum Beispiel hier einige japanische Inhalt:

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

Und es wäre wahrscheinlich wie folgt ausgegeben bekommen:

<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> 

Und content-type in der Regel text/html; charset=UTF-8 ist.

Wir verwenden writeTo Methode, um alle Header und Inhalte zu erhalten.

Ich habe versucht, das folgende zu tun, aber es hat nicht funktioniert:

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

Ich glaube auch, das Problem sein könnte, weil wir eine alte Version von Java Mail (1.5.0) verwenden.

Was können wir hier tun fremde Zeichen zu behandeln?

Antwort

1

die WriteTo Methode verwenden gibt Ihnen die MIME-kodierten Inhalt der Nachricht. Es klingt wie Sie die wollen Inhalt decodiert, für die Sie die getContent oder getInputStream Methode verwenden sollten. Die getContent-Methode gibt eine Zeichenfolge mit Unicode-Zeichen zurück, die Sie direkt verwenden können. Die Methode getInputStream gibt eine Bytezeichenfolge mit der Zeichencodierung zurück, die durch den Parameter charset angegeben wurde. Sie müssen es mit einem Reader umhüllen, um die Unicode-Zeichen zu erhalten.

Wenn Sie die Header auch z. B. zusammen mit dem Nachrichteninhalt anzeigen möchten, sollten Sie die Methoden getSubject, getRecipients usw. verwenden, die wiederum den dekodierten Inhalt zurückgeben. Sie können die getHeader-Methode verwenden, um andere Header zu erhalten, aber Sie müssen den Inhalt mithilfe der MimeUtility-Methoden selbst dekodieren.

Verwandte Themen