Jest nieprawidłowo sformatowany. You're not permitted to have whitespace characters in the middle of an RFC 2047 encoded-word, a tym samym JavaMail przestaje próbować dekodować Temat, gdy trafi w spację, zanim dotrze do terminala ?=
. Większość parserów będzie elastyczna w takich sprawach, biorąc pod uwagę, że tak wiele wiadomości jest zniekształconych w ten sposób, ale JavaMail jest nieco zbyt surowy w tym względzie. Nie jest to błędne, ale zdecydowanie nie jest "byciem liberalnym w tym, co akceptuje". To jest to, co ma do powiedzenia RFC:
WAŻNE: „zakodowane słowo zostały zaprojektowane tak, aby być uznane za” atomu przez RFC 822 parsera. W konsekwencji, znaki niekodowanej białej przestrzeni (takie jak SPACE i HTAB) są ZABRONIONE w obrębie zakodowanego słowa " ". Na przykład, kolejność znaków
=?iso-8859-1?q?this is some text?=
będą przetwarzane tak, czterech „atomu, zamiast w postaci pojedynczej«atomu»(o RFC 822 parser) lub«zakodowanego słowie»(za pomocą analizatora, który rozumie "słowa zakodowane"). Prawidłowy sposób kodowania ciągu znaków "to jest trochę tekstu" to jest kodowanie znaków SPACE, np.
=?iso-8859-1?q?this=20is=20some=20text?=
Można zamienić wszystkie spacje tam ze znaku podkreślenia, ale to może się bałagan, bo chcesz mieć w zasadzie napisać własny parser, aby wiedzieć, kiedy to zrobić.
Można również spróbować ustawić właściwość systemową mail.mime.decodetext.strict
na false
, ale pobieżne spojrzenie na kod JavaMail wygląda na to, że nie pomoże. (Mimo to warto spróbować, choć.)
@Cancer Lee: pisze "Próbowałem sugestii, to działa." Dlatego warto wypróbować 'mail.mime.decodetext.strict'. – dkarp