致以问候...... 我希望有人可以告诉我有关我遇到的问题的一些消息。
读取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()返回一个解码的输入流。
答案 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
,但这只是解决了信息损坏的基本问题。