Кодировка JavaMail base64 - PullRequest
       22

Кодировка JavaMail base64

3 голосов
/ 03 февраля 2012

У меня есть некоторый Java-код, который отправляет электронное письмо с кодом, похожим на следующее:

MimeBodyPart part = new MimeBodyPart();
part.setContent(htmlString, "text/html; charset=\"UTF-8\"");
part.setHeader("MIME-Version", "1.0");
part.setHeader("Content-Type", "text/html; charset=\"UTF-8\"");
part.setHeader("Importance", severityVal);

mimeMultiPart.addBodyPart(htmlPart);
mimeMessage.setContent(mimeMultiPart);

... и т. Д.

Как я могу кодировать «часть»MimeBodyPart в base64 для этого исходящего письма?

Ответы [ 2 ]

7 голосов
/ 03 февраля 2012

Из документов :

В: Несмотря на то, что JavaMail выполняет все кодирование и декодирование для меня, мне нужно вручную управлять кодированием для некоторых частей тела.A: В редком случае, когда вам нужно контролировать кодировку, есть несколько способов переопределить поведение JavaMail по умолчанию.Простой подход заключается в следующем.После создания всего сообщения, вызовите msg.saveChanges(), а затем используйте что-то вроде mbp.setHeader("Content-Transfer-Encoding", "base64") для принудительного кодирования base64 для данной части тела.

Другой подход - создать подкласс MimeBodyPart и переопределить метод updateHeadersсначала он вызывает super.updateHeaders(), а затем устанавливает заголовок Content-Transfer-Encoding, как указано выше.

2 голосов
/ 06 декабря 2016

просто добавьте это утверждение:

part.setHeader("Content-Transfer-Encoding", "base64");

после строк кода, которые устанавливают part.setDataHandler(..) или part.setContent(...), и dataSource / Handler адаптируется к содержимомуПередайте кодировку, которую вы только что указали для части тела.

Вы также можете рассмотреть возможность установки заголовков на тот же токен, например:

part.setHeader("Content-Type", "application/octet-stream");
...