Наше приложение берет текст из веб-формы и отправляет его по электронной почте соответствующему пользователю. Однако, когда кто-то копирует / вставляет в печально известные «умные цитаты» или другие специальные символы из Word, все становится волосатым.
Пользователь вводит
он сказал мне "привет" - разве это не мило?
Но когда сообщение появляется в Outlook 2003, оно выглядит так:
он поздоровался со мной, что мило?
Код для этого был:
Session session = Session.getInstance(props, new MailAuthenticator());
Message msg = new MimeMessage(session);
//removed setting to/from addresses to simplify
msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", MailSender.class.getName());
msg.setSentDate(new Date());
Transport.send(msg);
После небольшого исследования я решил, что это, вероятно, проблема с кодировкой символов, и попытался перенести вещи в UTF-8. Итак, я обновил код так:
Session session = Session.getInstance(props, new MailAuthenticator());
MimeMessage msg = new MimeMessage(session);
//removed setting to/from addresses to simplify
msg.setHeader("X-Mailer", MailSender.class.getName());
msg.addHeader("Content-Type", "text/plain");
msg.addHeader("charset", "UTF-8");
msg.setSentDate(new Date());
Transport.send(msg);
Это сблизило меня, но без сигары:
он сказал «привет» мне - разве это не мило?
Не могу представить, что это необычная проблема - что я пропустил?