来自tomcat 7的电子邮件编码

时间:2014-07-11 19:52:40

标签: java tomcat character-encoding javamail

我从Tomcat发送电子邮件时遇到编码问题。 如您所见,我添加了" UTF-8"电子邮件参数中的charset,我还添加了

过滤器
request.setCharacterEncoding("UTF-8");

我在网页的内容类型中有text / html; charset = UTF-8。

我使用在Apache Tomcat 7上运行的ZKoss 7.0.1。我的debian服务器上也有apache2,它使用mod_js重定向到我的应用程序。

所以我得到像?????????的符号当我尝试发送西里尔符号时。我也尝试在catalina.sh中设置-Dfile.encoding,但它没有帮助。

我有以下代码从tomcat发送电子邮件:

public static String sendProgramingMail(String text, String number) {

    try {

        final Properties props = GOOGLE_PROPERTIES;

        Session session = getSession(props);

        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(FROM));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(TO));
        message.setSubject(Labels.getLabel("email.subject"), "UTF-8");
        message.setContent(text + "<br/>Tel. " + number, "text/html; charset=UTF-8" );

        Transport transport = session.getTransport("smtp");
        transport.connect(props.getProperty("mail.smtp.host"), 
            Integer.parseInt(props.getProperty("mail.smtp.port")),
            props.getProperty("user"),
            props.getProperty("password"));            
        Address[] addr = new Address[1];
        addr[0] = new InternetAddress(TO);
        transport.sendMessage(message, addr);

    } catch (Exception e) {

        e.printStackTrace();
        return e.getMessage();

    }

    return null;

}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我还要添加response.setCharacterEncoding(“UTF-8”);在过滤器中。

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    chain.doFilter(request, response);

}