Преобразование 8-битного сообщения MIME в кавычки для печати

Каков самый простой способ преобразовать электронное письмо MIME, содержащее необработанные 8-битные части, в сообщение, совместимое с RFC822, содержащее только 7-битные части?
Части должны быть автоматически преобразованы в "Content-Transfer-Encoding: quote-printable".

Мое приложение разработано на Java. Но инструмент командной строки был бы великолепен. Я попробовал реформим, но этот инструмент кажется глючным и не переписывает сообщение должным образом :-(

Спасибо за любую помощь,
Оливье


person Antares    schedule 21.01.2011    source источник


Ответы (1)


JavaMail кажется хорошим решением. Создайте MimeMessage из своего файла, найдите части тела, кодировку передачи содержимого которых вы хотите изменить, вызовите MimeBodyPart.setHeader("Content-Transfer-Encoding", "quoted-printable") и напишите полученное сообщение через MimeMessage.writeTo().

Что-то в этом роде:

Session session = Session.getInstance(new Properties());
MimeMessage mm = new MimeMessage(new FileInputStream(msgfile));
// assuming we know that it's a multipart; otherwise, check Content-Type first...
MimeMultipart multi = (MimeMultipart) mm.getContent();
for (int i = 0; i < multi.getCount(); i++) {
    MimeBodyPart mbp = (MimeBodyPart) multi.getBodyPart(i);
    mbp.setHeader("Content-Transfer-Encoding", "quoted-printable");
}
mm.saveChanges();
mm.writeTo(new FileOutputStream(outfile));

Обратите внимание, что MimeMessage по умолчанию сбрасывает заголовок Message-ID, когда вы вносите изменения в сообщение. Если вы этого не хотите, замените MimeMessage.updateMessageID() на no-op.

person dkarp    schedule 21.01.2011
comment
Благодарю за ваш ответ. Изменение объекта MimeMessage JavaMail не работает должным образом с вложенными составными частями. С вашим решением некоторые части обновлены, а некоторые нет. Я думаю, что это известная проблема с JavaMail (см.: labs.consol.de/lang/en/blog/java/java-mail/). - person Antares; 22.01.2011
comment
Мой пример кода не обрабатывает вложенные составные части; это просто руководство, чтобы показать вам функции, которые вы, возможно, захотите использовать. Вы действительно написали рекурсивную программу, которая демонстрирует проблемы, упомянутые в статье? Поскольку сообщения, проанализированные из потока, не должны иметь этой проблемы... - person dkarp; 22.01.2011