javax.mail - проблема расшифровки темы - PullRequest
6 голосов
/ 18 января 2011

У меня проблема с расшифровкой почты на следующую тему:

Тема: =? 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 ]

6 голосов
/ 18 января 2011

Это неправильно. Вам не разрешено иметь пробельные символы в середине кодированного слова 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 выглядит так, что это не поможет.(Тем не менее, стоит попробовать.)

2 голосов
/ 18 января 2011

Вы звонили javax.mail.internet.MimeUtility decodeText по теме?

0 голосов
/ 13 июня 2013

редактировать: извините, этот ответ - полная чушь, в наших проектах есть два класса, которые также включают MimeUtility и другие, делающие много дурацких вещей К сожалению !!!!!

...