2013-04-19 3 views
0

У меня есть кварц cron задание, которое проверяет сообщения электронной почты с сервера в течение определенного интервала. Он идет рекурсивно и извлекает все прикрепленные файлы и сохраняет их.Исправить имена файлов вложений

Он хорошо работает с 95% из них, но иногда я получаю письма, чьи имена вложения приходят закодированный в другом формате, например:

=?windows-1252?Q?This_is_nice?windows-1252?Q?=2Em4v?= 

И я уверен, что они выглядят Ok , когда они отправляются

Как эти искаженные имена файлов могут быть снова преобразованы в читаемый текст, поэтому я могу правильно задать имена файлов?

Я использую основные функции JavaMail (Part.getFileName())

ответ

0

Похоже, некоторые символы в именах файлов не может быть представлен в кодировке, используемой в сообщении электронной почты. Вы явно устанавливаете текстовое кодирование для сообщения, если не пытаетесь установить его в UTF-8, как предложено here.

+0

все, что я получаю это исключение - IMapMessage только для чтения – preslavrachev

0

Там происходит серьезная коррупция. Какая программа отправляет эти сообщения? Похоже, что некоторые программы пытались дважды закодировать имя файла. Возможно, какой-то спамер пытается вызвать ошибку в Windows.

В подобных случаях вам придётся прибегать к эвристике. Когда вы получите исключение, вы можете извлечь необработанный заголовок и попробовать все, что хотите декодировать заголовок. Если имя файла повреждено предсказуемым образом, вы можете отменить повреждение, а затем использовать методы MimeUtility для его декодирования.

0

Это не коррупция. Я предлагаю вам использовать регулярное выражение для обнаружения и очистки имени файла, если указана кодировка и кодировка имени файла.

"=?" charset "?" кодирование "?" закодированный текст "? ="

См http://tools.ietf.org/html/rfc2047