Я использую Javamail (javax.mail) для отправки писем. Я успешно скорректировал содержание своей почты как utf-8. Однако я не мог установить строку темы как utf-8 закодированная строка.
Я попробовал даже
mail.setSubject(new String(subject.getBytes("utf-8"), "utf-8"));
на предмете однако это все еще отправляет как Cp1252. Заголовки в качестве примера от почты даны ниже:
Какие-либо идеи?
пример от почтовых заголовков http://m.friendfeed-media.com/a328a80db12f3c17a8aed06be106045354355abf
Вы должны использовать 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"));`
Решено.
mail.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));
решает эту проблему и отправляет сообщения в кодировке utf-8. \ n /
допустимые значения для "кодировки" - "Q" и "B" ... Кодировка "Q" - рекомендуется использовать, когда большая часть кодируемых символов находится в набор символов ASCII; в противном случае следует использовать кодировку "B".