javax.mail-问题解码主题

javax.mail-问题解码主题,java,character-encoding,jakarta-mail,Java,Character Encoding,Jakarta Mail,我在解码带有以下主题的邮件时遇到问题: 主题:=?ISO-8859-1?Q?回复:回复:回复: Fwd:(GI?= =?ISO-8859-1?Q?支持Id:11729)= javamail将其解码为: =?ISO-8859-1?Q?Re:Re:Re:Fwd:(GI?=支持Id:11729) 这是一个有效的主题吗? 或者javamail应该能够阅读这个吗 问候你打电话问这个问题了吗?格式不正确,因此,当JavaMail在到达终端之前到达一个空格时,它停止尝试解码主题。考虑到如此多的消息以这种方式被

我在解码带有以下主题的邮件时遇到问题:

主题:=?ISO-8859-1?Q?回复:回复:回复: Fwd:(GI?= =?ISO-8859-1?Q?支持Id:11729)=

javamail将其解码为:

=?ISO-8859-1?Q?Re:Re:Re:Fwd:(GI?=支持Id:11729)

这是一个有效的主题吗? 或者javamail应该能够阅读这个吗

问候

你打电话问这个问题了吗?

格式不正确,因此,当JavaMail在到达终端之前到达一个空格时,它停止尝试解码主题。考虑到如此多的消息以这种方式被错误地格式化,大多数解析器在这方面都是灵活的,但是JavaMail在这方面有点太严格了。这没有错,但绝对不是“接受什么就自由”。这是RFC必须说的:

重要提示:“编码字被设计为被识别为“原子” 通过RFC 822解析器。因此,未编码的空格 字符(如空格和HTAB)在 “编码字”。例如,字符序列

=?iso-8859-1?q?this is some text?=
将被解析为四个“原子”,而不是单个“原子” RFC 822解析器)或“编码字”(由理解 “编码字”)。正确编码字符串“这是一些 “文本”也用于对空格字符进行编码,例如

=?iso-8859-1?q?this=20is=20some=20text?=
您可以用下划线字符替换其中的所有空格,但这可能会变得混乱,因为您必须编写自己的解析器才能知道何时执行此操作

您还可以尝试将系统属性
mail.mime.decodetext.strict
设置为
false
,但是粗略地看一下JavaMail代码似乎没有什么帮助。(不过仍然值得一试。)

编辑: 对不起,这个答案完全是胡说八道,我们的项目中有两个类,imlpemeting,还有MimeUtility等等,做了很多胡说八道的事情。
对不起

MimeMessage.getSubject()
会自动执行此操作。dkarp,您是对的,但我们没有关于Gerhard使用哪种方法的信息。请查看他的示例。格式正确的编码字会被解码,而格式错误的字不会被解码。他要么自己叫
MimeUtility.decodeText()
,要么自己叫
MimeMessage.getSubject()
,但无论哪种情况,对
decodeText
的另一个调用都不会有帮助。@Cancer Lee:写道“我尝试了这个建议,它奏效了。”所以在哪个包中给
mail.mime.decodeText.strict
一个try.MimeUtility?javax.mail中没有这样的方法