javax.mail - 问题解码主题

时间:2011-01-18 14:15:19

标签: java character-encoding javamail

我在使用以下主题解码邮件时遇到问题:

  

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

javamail将其解码为:

  

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

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

问候

3 个答案:

答案 0 :(得分:6)

这是畸形的。 You're not permitted to have whitespace characters in the middle of an RFC 2047 encoded-word,因此JavaMail在它到达终端?=之前遇到空格时停止尝试解码主题。考虑到许多消息以这种方式出错,大多数解析器都会对这类事情保持灵活性,但JavaMail在这方面有点过于严格。这不是错误的,但它肯定不是“在接受的东西中自由”。这就是RFC所说的:

  

重要提示:'encoded-word'被设计为被识别为'atom'    通过RFC 822解析器。因此,未编码的空白区域    字符(例如SPACE和HTAB)是FORBIDDEN中的一个    “编码字”。例如,字符序列

=?iso-8859-1?q?this is some text?=
     

将被解析为四个'原子',而不是一个'原子'(by    RFC 822解析器)或'encoded-word'(由理解的解析器)    “编码字”)。编码字符串的正确方法“这是一些    text“也是对SPACE字符进行编码,例如

=?iso-8859-1?q?this=20is=20some=20text?=

你可以用下划线字符替换那里的所有空格,但这可能会变得混乱,因为你基本上必须编写自己的解析器才能知道何时这样做。

您也可以尝试将系统属性mail.mime.decodetext.strict设置为false,但粗略查看JavaMail代码看起来无济于事。 (尽管如此,还是值得尝试。)

答案 1 :(得分:2)

您是否曾在主题上致电javax.mail.internet.MimeUtility decodeText

答案 2 :(得分:0)

修改 sorrry这个答案是完全废话,在我们的项目中有两个类,还有MimeUtility和更多,做了很多糟糕的事情。 遗憾!!!!!