2011-01-18 9 views
6

jestem w obliczu problemu dekodowania mail z następującym zastrzeżeniem:javax.mail - Problem dekodowanie przedmiotem

Subject: = ISO-8859-1 Q Re: Re: Re: Fwd?? (Gl = = ISO-8859-1 P oporowo-Id:?? 11729) =

JavaMail dekoduje ją jako:?

= ISO-8859-1 Q ? Re: Re: Re: Fwd: (GI? = Support-Id: 11729)

czy to jest ważny temat w ogóle? czy javamail powinien być w stanie to przeczytać?

pozdrowienia

Odpowiedz

6

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ć.)

+0

@Cancer Lee: pisze "Próbowałem sugestii, to działa." Dlatego warto wypróbować 'mail.mime.decodetext.strict'. – dkarp

2
+1

'MimeMessage.getSubject()' robi to automatycznie. – dkarp

+0

dkarp, masz rację, ale nie mamy informacji na temat metody, której użył Gerhard. – andcoz

+0

Sprawdź jego przykład. Dobrze sformułowane słowo kodowane jest dekodowane, a zniekształcone nie. Albo nazywa się 'MimeUtility.decodeText()' albo nazywa się 'MimeMessage.getSubject() ', ale w obu przypadkach inne wywołanie' decodeText' nie pomoże. – dkarp

0

edit: sorrry ta odpowiedź jest kompletna bzdura, istnieją dwie klasy w naszych projektach, imlpemeting również MimeUtility i więcej, robiąc wiele rzeczy brzydko. Przepraszam !!!!!

+1

MimeUtiliy w jakim pakiecie? Nie ma takiej metody w javax.mail –