我在使用以下主题解码邮件时遇到问题:
主题:=?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能够读取这个吗?
问候
答案 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和更多,做了很多糟糕的事情。 遗憾!!!!!