Ger*_*ser 6 java jakarta-mail character-encoding
我正在解决使用以下主题解码邮件的问题:
主题:=?ISO-8859-1?Q?Re:Re:Re:Fwd:(GI?= =?ISO-8859-1?Q?Support-Id:11729)?=
javamail将其解码为:
=?ISO-8859-1?Q?Re:Re:Re:Fwd:(GI?= Support-Id:11729)
这是一个有效的主题吗?或者javamail能够读取这个吗?
问候
这是畸形的. 您不允许在RFC 2047编码字的中间使用空白字符,因此JavaMail在它到达终端之前遇到空格时停止尝试解码主题?=.考虑到许多消息以这种方式出错,大多数解析器都会对这类事情保持灵活性,但JavaMail在这方面有点过于严格.这没有错,但绝对不是"在它接受的东西中自由".这就是RFC所说的:
重要提示:'encoded-word'旨在被RFC 822解析器识别为'atom'.因此,未编码的空白字符(例如SPACE和HTAB)在"编码字"内是禁止的.例如,字符序列
Run Code Online (Sandbox Code Playgroud)=?iso-8859-1?q?this is some text?=将被解析为四个'原子',而不是作为单个'原子'(通过RFC 822解析器)或'编码单词'(通过理解'编码单词'的解析器).对字符串"this is some text"进行编码的正确方法是对SPACE字符进行编码,例如
Run Code Online (Sandbox Code Playgroud)=?iso-8859-1?q?this=20is=20some=20text?=
你可以用下划线字符替换那里的所有空格,但这可能会变得混乱,因为你基本上必须编写自己的解析器才能知道何时这样做.
您也可以尝试将系统属性设置mail.mime.decodetext.strict为false,但粗略地看一下JavaMail代码看起来无济于事.(尽管如此,还是值得尝试.)