MimeMessage内容传输编码问题

时间:2011-03-30 23:36:55

标签: java character-encoding javamail

致以问候...... 我希望有人可以告诉我有关我遇到的问题的一些消息。

读取MimeMessage的getInputStream()的Javadoc,它说“为此Message的内容返回已解码的输入流” 但是,这不是我所经历的。输出未解码。例如,如果我有一条消息,则跟随

Date: Wed, 24 Feb 2010 11:29:13 +1100
From: xxxxxxxxx
To: xxxxxxxxxxxx
Message-ID: <4B8472D9.5050901@xxxxxxxxx>
Subject: xxxxxxxxxxxxxxxxxx
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------000801030004000206000901"
Content-Transfer-Encoding: quoted-printable
Organization: xxxxxxxxxxxxxxxxxx
User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)

This is a multi-part message in MIME format.
--------------000801030004000206000901
Content-Type: text/plain; charset=3DISO-8859-1; format=3Dflowed
Content-Transfer-Encoding: 7bit

!

--------------000801030004000206000901
Content-Type: text/plain;
 name=3D"bla.bla"
Content-Transfer-Encoding: 8bit
Content-Disposition: inline;
filename=3D"bla.bla"

 my.username =3D holly
my.host =3D molly
--------------000801030004000206000901--

然后,假设我有一个名为'm'的对象用上面的内容构造,然后调用m.getInputStream()并将输出转储到屏幕上显示那些'= 3D'字符集。 我做错了什么?

如果我使用QPDecoderStream来解码m.getInputStream()的输出,那么结果当然是正确的。然而,它失败了,因为Javadoc说getInputStream()返回一个解码的输入流。

1 个答案:

答案 0 :(得分:2)

此处的问题是邮件格式错误。 You're not allowed to set Content-Transfer-Encoding to quoted-printable on a multipart part

  

如果Content-Transfer-Encoding标头字段显示为      消息头,它适用于该消息的整个主体。如果一个      Content-Transfer-Encoding标头字段显示为实体的一部分      标题,它仅适用于该实体的主体。如果是实体      “multipart”类型不允许Content-Transfer-Encoding      除了“7bit”,“8bit”或“binary”之外还有任何其他值。

您可能会获得顶级MimeMessage的已解码内容流,并从中实例化MimeMultipart,但这只是解决了信息损坏的基本问题。