Электронная почта Java utf8 не работает с IE после развертывания - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть почтовый класс, который отлично работает с IE, когда я запускаю приложение локально, но после его развертывания на сервере оно продолжает посылать gobbledygook и нечитаемые символы, я не вижу, в чем проблема, все - utf8, вот мой код:

    public static void sendHTMLEmail(String to, String subject, String body)
        throws EmailException {

    HtmlEmail email = new HtmlEmail();
    email.setSmtpPort(25);
    email.setAuthenticator(new DefaultAuthenticator("myMail","myPass"));
    email.setDebug(false);
    email.setHostName("smtp.gmail.com");


    email.setFrom("webmail@mysite.com","Webmail@mysite");
    email.setCharset("UTF-8");
    email.setSubject(subject);

    // --set Body-- 
    String HTMLBody ="<html xmlns='http://www.w3.org/1999/xhtml'>";
    HTMLBody += "<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head>";
    HTMLBody += "<body><div dir='rtl'>";
    HTMLBody += body;
    HTMLBody += "</div></body></html>";
    // -----------

    email.setHtmlMsg(HTMLBody);
    email.setTextMsg("Your email client does not support HTML messages");

    email.addTo(to);
    email.setTLS(true);
    email.send();

}

и вот мои библиотеки:

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.SimpleEmail;

Спасибо за ваше время

1 Ответ

2 голосов
/ 24 апреля 2011

Я предполагаю, что аргумент метода String body на самом деле является данными, предоставленными пользователем, которые были введены в некоторые <input> или <textarea> и переданы <form method="post"> на странице JSP.

Данные будут отправлены с использованием кодировки, как указано в заголовке Content-Type страницы, содержащей форму. Если кодировка отсутствует в заголовке Content-Type, то браузер просто сделает правильное предположение, а MSIE, как правило, не такой умный, как другие, он просто получит кодировку по умолчанию для клиентской платформы.

Вам нужно убедиться в следующих трех вещах, чтобы все было понятно:

  • Убедитесь, что HTTP-ответ, содержащий <form>, был отправлен с charset=UTF-8 в заголовке Content-Type. Вы можете добиться этого, добавив следующую строку в начало JSP, отвечающей за генерацию ответа:

    <%@page pageEncoding="UTF-8" %>
    

    Это не только устанавливает кодировку ответа в UTF-8, но также неявно устанавливает заголовок Content-Type в text/html;charset=UTF-8.

  • Убедитесь, что сервлет, который обрабатывает отправку формы, обрабатывает входные данные в полученном HTTP-запросе с той же кодировкой символов. Этого можно добиться, добавив следующую строку до , когда вы получите любую информацию из запроса, например getParameter().

    .
    request.setCharacterEncoding("UTF-8");
    

    Более удобным способом было бы отбросить эту строку в некотором Filter, который сопоставлен с интересующим шаблоном URL, так что вам не нужно копировать строку для всех сервлетов.

  • Убедитесь, что вы не используете атрибут accept-charset <form>. MSIE имеет серьезные ошибки с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...