Java-кодировка почты ISO-8859-2 не работает - PullRequest
4 голосов
/ 17 января 2010

У меня проблема с Java Mail API.

Я могу успешно отправить почту, но некоторые специальные символы (из языков ISO-8859-2, таких как чешский, словацкий) не отображаются в почте. Они повреждены даже на выходе IDE.

Что я делаю не так?

Message msg = new MimeMessage(session);
msg.setContent(message, "text/plain; charset=iso-8859-2")

Ответы [ 4 ]

2 голосов
/ 10 мая 2010

msg.setContent (сообщение "text / plain; charset = UTF-8");

вместо кодировки, которую вы дали?

2 голосов
/ 17 января 2010

Я нашел решение, используя multipart. вот код:

MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
MimeMultipart multipart = new MimeMultipart();
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
MimeBodyPart tmpBp = new MimeBodyPart();
tmpBp.setContent(message,"text/plain; charset=utf-8");
multipart.addBodyPart(tmpBp);
msg.setContent(multipart);
Transport.send(msg);
0 голосов
/ 18 января 2010

Вы должны использовать метод setText из класса MimeMessage вместо setContent

/**
     * Convenience method that sets the given String as this part's
     * content, with a MIME type of "text/plain" and the specified
     * charset. The given Unicode string will be charset-encoded
     * using the specified charset. The charset is also used to set
     * the "charset" parameter.
     *
     * @param   text    the text content to set
     * @param   charset the charset to use for the text
     * @exception   MessagingException  if an error occurs
     */
    public void setText(String text, String charset)
            throws MessagingException {
0 голосов
/ 17 января 2010

Вместо этого используйте UTF-8 в качестве набора символов и настройте консоль IDE на использование того же набора символов. Я не знаю, какую IDE вы используете, потому что вы не сказали об этом, но если это была Eclipse, вы можете изменить ее с помощью Window > Предпочтения > Общие > Рабочая область > Кодировка текстового файла > Другое > UTF-8 .

Если это не решит проблему, значит, проблема в другом месте. Возможно, вы читаете сообщение из файла, используя неправильную кодировку. Для этого вам нужно использовать InputStreamReader, который принимает кодировку в качестве аргумента второго конструктора.

...