Неизвестная кодировка, цитируемая/распечатываемая при чтении электронной почты с помощью почтового API Java

У меня есть самописный почтовый клиент Java, который читает сообщения с почтового сервера.

У меня не было с этим проблем, но недавно я обнаружил исключение, когда этот клиент пытался прочитать одно сложное электронное письмо. Трассировка стека говорит, что кодировка 'quoted/printable' неизвестна, и, вероятно, этой информации достаточно, чтобы найти решение.

В любом случае, я дополню вопрос и выложу лог сюда:

java.io.IOException: Unknown encoding: quoted/printable
at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:113)
at com.sun.mail.handlers.text_plain.getContent(text_plain.java:107)
at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:790)
at javax.activation.DataHandler.getContent(DataHandler.java:537)
at javax.mail.internet.MimeBodyPart.getContent(MimeBodyPart.java:644)

Вот часть сообщения, содержащая эту информацию о кодировке

--=_374450e655545f2af979375837b3e516
Content-Transfer-Encoding: quoted/printable
Content-Type: text/plain; charset=utf-8

Остальная информация представляет собой текст в формате thml.

Итак, есть ли способ решить проблему без изменения поставщика/версии javax.mail? Теперь я использую

 group: 'com.sun.mail', name: 'javax.mail', version: '1.5.1'

Или, может быть, я просто неправильно понял проблему, и я должен решить ее по-другому?


person AdamSkywalker    schedule 21.10.2014    source источник
comment
Может ли этот ответ помочь?   -  person gtgaxiola    schedule 21.10.2014
comment
@gtgaxiola ммм, на самом деле я не решаю вручную, какую кодировку использовать, я просто вызываю метод hrtContent без параметров   -  person AdamSkywalker    schedule 21.10.2014


Ответы (1)


Какая бы почтовая программа не создала это сообщение, оно сломано. Пожалуйста, сообщите о проблеме владельцу этой почтовой программы. Правильное название — «quoted-printable», а не «quoted/printable».

Чаще всего такие ошибки возникают из-за того, что любители пишут спам-рассылочные программы, не удосужившись сначала прочитать RFC.

Вы можете установить для системного свойства «mail.mime.ignoreunknownencoding» значение «true», чтобы JavaMail просто игнорировал ошибку и не пытался декодировать данные. Вы также можете поймать исключение, использовать метод getEncoding, чтобы получить значение заголовка, и попытаться угадать, что имел в виду отправитель, затем использовать метод getRawInputStream и самостоятельно декодировать данные.

person Bill Shannon    schedule 21.10.2014