Это неправильно. Вам не разрешено иметь пробельные символы в середине кодированного слова RFC 2047 , и, следовательно, JavaMail прекращает попытки декодировать Субъект, когда он попадает в пробел, прежде чем он достигнет терминала ?=
.Большинство анализаторов будут гибкими в таких вещах, учитывая, что таким образом многие сообщения искажаются, но JavaMail слишком строг в этом отношении.Это не неправильно , но это определенно не «быть либеральным в том, что он принимает».Вот что говорит RFC:
ВАЖНО: «закодированные слова предназначены для распознавания как« атома »анализатором RFC 822.Как следствие, незашифрованные символы пробела (такие как SPACE и 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 выглядит так, что это не поможет.(Тем не менее, стоит попробовать.)