barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком email subject encoding. Показать все сообщения
Показаны сообщения с ярлыком email subject encoding. Показать все сообщения

среда, 5 февраля 2014 г.

JavaMail: кодировка по-умолчанию, используемая в заголовках писем

Вообще, не-ascii заголовки в почтовых сообщениях кодируются в соответствии с RFC 2047 (http://www.faqs.org/rfcs/rfc2047/). При отправке почты с помощью Javamail столкнулся со следующей проблемой: формируется заголовок письма, имеющий вид:
=?UTF8?B?0J3QsNC/0YDQsNCy0LvQtdC9INC00L7QutGD0LzQtdC9?= =?UTF8?B?0YI6INC+0YjQuNCx0LrQuCDQsiBlbWFpbA==?=
Не совсем корректным здесь является имя используемой кодировки - "UTF8", в то время как IANA предписывает использовать имя "UTF-8", т.е. с дефисом (http://www.iana.org/assignments/character-sets/character-sets.xhtml). Такие заголовки "съедаются" Outlook'ом, веб-клиентами mail.ru и gmail.com, однако, например, SquirrelMail выводит такой заголовок "как есть", не выполняя декодирование. 
Для установки заголовка мой код (вернее не мой, а код open-source проекта, но не суть) испольует javax.​mail.​internet.​MimeMessage.setSubject(java.lang.String subject). В документации сказано, что данный метод использует "platform's default charset" (http://docs.oracle.com/javaee/6/api/javax/mail/internet/MimeMessage.html#setSubject(java.lang.String)), по факту - системное свойство file.encoding.
Посмотрев в стартовые скрипты приложения, я обнаружил, что там действительно указана опция jvm "-Dfile.encoding=UTF8". Поменяв ее на "-Dfile.encoding=UTF-8" я решил проблему с некорректным именем кодировки в заголовках отправляемых почтовых сообщений.

вторник, 11 июня 2013 г.

Кодирование не-ASCII символов в теме email

Кодирование не-ASCII символов в теме email-сообщения выполняется в соответствии с RFC 2047. Заголовок представляется в виде одной или нескольких последовательностей следующего формата:
=?<charset>?<encoding>?<data>?<possibly repeated>?=
Здесь charset - кодировка, а encoding - способ представления закодированного текста (последовательности байт): B означает base64, Q - quoted printable.
Например:
=?UTF8?B?0J3QsNC/0YDQsNCy0LvQtdC9INC00L7QutGD0LzQtdC90YI6IA==?=
- это результат кодирования строки "Направлен документ: " с помощью кодировки utf8 и последующего представления последовательности байт в виде base64.