【问题标题】:MimeMessage Content-Transfer-Encoding issueMimeMessage 内容传输编码问题
【发布时间】:2011-03-31 11:10:14
【问题描述】:

大家好... 我希望有人能给我一些关于我遇到的问题的信息。

阅读 MimeMessage 的 getInputStream() 的 Javadoc,它说 “返回此消息内容的解码输入流” 然而,这不是我所经历的。输出未解码。例如,如果我有一条消息,则如下

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() 返回一个解码的输入流。

【问题讨论】:

    标签: java character-encoding jakarta-mail


    【解决方案1】:

    这里的问题是消息格式错误。 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,但这只是解决了损坏消息的基本问题。

    【讨论】:

    • 非常感谢。这解释了为什么它一直如此。
    猜你喜欢
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    相关资源
    最近更新 更多