Javamail, изменяющий набор символов строки темы

Я использую Javamail (javax.mail) для отправки писем. Я успешно скорректировал содержание своей почты как utf-8. Однако я не мог установить строку темы как utf-8 закодированная строка.

Я попробовал даже

mail.setSubject(new String(subject.getBytes("utf-8"), "utf-8"));

на предмете однако это все еще отправляет как Cp1252. Заголовки в качестве примера от почты даны ниже:

Какие-либо идеи?

пример от почтовых заголовков http://m.friendfeed-media.com/a328a80db12f3c17a8aed06be106045354355abf

11
задан AhmetB - Google 10 August 2010 в 16:36
поделиться

2 ответа

Вы должны использовать setSubject (String subject, String charset) , который является удобной функцией для этой цели.

Session session=Session.getDefaultInstance(new Properties());
MimeMessage mimeMsg= new MimeMessage(session);
String subject="Herr Müller reist nach \u0141\u00f3d\u017a.";
mimeMsg.setSubject(subject,"utf-8");
System.out.println(subject);
System.out.println(mimeMsg.getHeader("Subject")[0]);

В MimeUtility сказано:

Существует набор методов для кодирования и декодирования заголовков MIME согласно RFC 2047. Обратите внимание, что, как правило, эти методы не нужны при использовании таких методов, как как setSubject и setRecipients; JavaMail автоматически кодирует и декодирует данные при использовании этих методов «более высокого уровня». Приведенные ниже методы необходимы только при манипулировании необработанными заголовками MIME с использованием методов setHeader и getHeader.

С моей точки зрения, Message.setSubject должен быть точкой входа для этой цели.

Отображается cp1252 в вашей предметной кодировке, потому что это стандартная кодировка на вашей платформе.

Опубликованный вами пример является «результатом»

mail.setSubject(MimeUtility.encodeText(subject, "cp1252", "Q"));`
26
ответ дан 3 December 2019 в 00:58
поделиться

Решено.

mail.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));

решает эту проблему и отправляет сообщения в кодировке utf-8. \ n /

допустимые значения для "кодировки" - "Q" и "B" ... Кодировка "Q" - рекомендуется использовать, когда большая часть кодируемых символов находится в набор символов ASCII; в противном случае следует использовать кодировку "B".

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

23
ответ дан 3 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: