2011-01-18 14 views
6

sto di fronte a un problema di decodifica una mail con il seguente oggetto:javax.mail - problema di decodifica soggetto

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

JavaMail decodifica come:??

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

è un argomento valido? o javamail dovrebbe essere in grado di leggere questo?

riguarda

risposta

6

È malformato. You're not permitted to have whitespace characters in the middle of an RFC 2047 encoded-word, e quindi JavaMail smette di provare a decodificare l'oggetto quando colpisce uno spazio prima che colpisca il terminale ?=. La maggior parte dei parser sarà flessibile su cose come questa, dato che così tanti messaggi sono malformati in questo modo, ma JavaMail è un po 'troppo severo in questo senso. Non è sbagliato, ma non è sicuramente "essere liberale in ciò che accetta". Questo è ciò che il RFC ha da fare:

importante: 'di codificati-parola sono progettati per essere riconosciuto come' atomo di da un RFC 822 parser. Di conseguenza, lo spazio bianco non codificato caratteri (come SPACE e HTAB) è VIETATO in una "parola codificata" . Ad esempio, la sequenza di caratteri

=?iso-8859-1?q?this is some text?= 

sarebbe interpretata come quattro 'atomo di, piuttosto che come un singolo 'atomo'(di un RFC 822 parser) o 'codificati-parola'(da un parser che comprende 'codificati-parole'). Il modo corretto di codificare la stringa "questo è un po 'di testo " è di codificare anche i caratteri SPACE, ad es.

=?iso-8859-1?q?this=20is=20some=20text?= 

si potrebbe sostituire tutti gli spazi in là con il carattere di sottolineatura, ma che può ottenere disordinato perché si sarebbe in sostanza deve scrivere il proprio parser in modo da sapere quando farlo.

Si potrebbe anche provare a impostare la proprietà di sistema mail.mime.decodetext.strict su false, ma un aspetto superficiale del codice JavaMail non sembra essere di aiuto. (Eppure vale la pena provare, però.)

+0

@Cancer Lee: scrive "Ho provato il suggerimento, funziona". Quindi prova "mail.mime.decodetext.strict". – dkarp

2

hai chiamato javax.mail.internet.MimeUtility decodeText sull'argomento?

+1

'MimeMessage.getSubject()' lo fa automaticamente. – dkarp

+0

dkarp, hai ragione ma non abbiamo informazioni su quale metodo ha usato Gerhard. – andcoz

+0

Controlla il suo esempio. La parola codificata ben formata viene decodificata e quella malformata no. È chiamato 'MimeUtility.decodeText()' o si chiama 'MimeMessage.getSubject() ', ma in entrambi i casi un'altra chiamata a' decodeText' non aiuterà. – dkarp

0

edit: sorrry questa risposta è completa schifezza, ci sono sono due classi nei nostri progetti, anche imlpemeting MimeUtility e di più, fare cose molto scadente. Scusa !!!!!

+1

MIMEUtiliy in quale pacchetto? Non esiste un metodo simile in javax.mail –