尝试使用Javamail解析带有外来字符的电子邮件时获得奇怪的输出

时间:2016-11-10 17:10:45

标签: java email 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 个答案:

答案 0 :(得分:1)

使用writeTo方法为您提供邮件的MIME编码内容。听起来你想要解码内容,你应该使用getContent或getInputStream方法。 getContent方法将返回一个Unicode字符串,您可以直接使用它。 getInputStream方法将返回一个字节字符串,其中包含charset参数指定的字符编码;你需要用Reader包装它来获取Unicode字符。

如果您还想要标题,例如,将它们与消息内容一起显示,您应该使用getSubject,getRecipients等方法,这些方法将再次返回已解码的内容。您可以使用getHeader方法获取其他标头,但您需要使用MimeUtility方法自行解码内容。