如何在Apache Commons Email中更改字符集?

19

我正在使用Apache Commons email向我的客户发送邮件,但是我有一个名为'Semana da Computação'(葡萄牙语BR)的客户,但它被写成了'Semana da Computação'。

我尝试修改我的代码,但是什么也没用:

public static boolean emailWithImage(String subject, String message, String emailReceiver, String imageURL) {
    HtmlEmail email = new HtmlEmail();
    email.setCharset("UTF-8"); // I change here, but it is not working
    email.setHostName(Constantes.EMAIL_HOST_NAME);
    email.setSmtpPort(587);
    DefaultAuthenticator authenticator =
            new DefaultAuthenticator(Constantes.EMAIL_USER, Constantes.EMAIL_PASSWORD);
    email.setAuthenticator(authenticator);
    email.setTLS(true);

    try {
        email.setFrom(Constantes.EMAIL_USER, Constantes.EMAIL_NAME);
        email.setSubject(subject);
        email.addTo(emailReceiver);

        URL url = new URL(imageURL);
        String cid = email.embed(url, "image");        /* it must be 'cid' the name of the image */

        email.setHtmlMsg("<html><img src=\"cid:" + cid + "\"> <p>" + message + "</p> </html>"); /* set the html message */
        email.setTextMsg(message);                     /* send a alternative text in case when the email reader don't support html */

        email.send();
    } catch (EmailException ex) {
        return false;
    } catch (MalformedURLException ex) {
        return false;
    }

    return true;
}

有什么想法?为什么名称不能正确显示,我该怎么修复它?

3个回答

27

这也可以运作,

email.setCharset("utf-8");

如果您正在使用1.3版本,可以选择以下方法:

email.setCharset(org.apache.commons.mail.EmailConstants.UTF_8);

请参见https://dev59.com/Smw15IYBdhLWcg3wxuvL。 - nylund
2021年08月仍然有效! - Maurice Müller

3
如果你使用setHtmlMessage(...)不能正常工作,可以尝试使用以下方法:
email.addPart("<html>body here</html>", "text/html;charset=UTF-8");

另一个选择是尝试将字符集放在HTML中。

email.setHtmlMsg("<html><head><META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\"></head>body here</html>");

1

我遇到了同样的问题,为了解决它,我已经将编码设置为ISO-8859-1,现在它可以工作了。


1
你好用户,你可以展示一个代码示例来让答案更加完整。祝你好运,并希望这能帮到你! - jamesmortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接