java - 使用 html Java 发送电子邮件

标签 java character-encoding html-email

我正在发送带有 HTML 代码的电子邮件,一切都很好,除了一些我认为字符集的错误。 我的Java代码:

 public static void sendMail(String to, String from, String body, String subject) {
        Properties properties = System.getProperties();

        properties.setProperty("mail.smtp.host", "smtp.gmail.com");
        properties.setProperty("mail.smtp.socketFactory.port", "465");
        properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.setProperty("mail.smtp.auth", "true");
        properties.setProperty("mail.smtp.port", "465");

        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(GMAIL_USERNAME, GMAIL_PASSWORD);
            }
        });
        try {
            MimeMessage message = new MimeMessage(session); // email message
            message.setFrom(new InternetAddress(from)); // setting header fields
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject); // subject line
            message.setContent(body, "text/html");
            message.setHeader("charset", "UTF-8");

            Transport.send(message);
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }

我的html内容:

    String htmlCode =
            "<h2>ZDelivery<h2>"+
            "<br/><button><a href='"+confirmString+"'>Активировать аккаунт</a></button>";

以及我收到的电子邮件:

enter image description here

我错过了什么?

最佳答案

编码由电子邮件 header 字段Content-Type传输,该字段由setContent()方法的mime类型参数设置:

message.setContent(body, "text/html; charset=UTF-8");

如果不在 mime 类型中设置字符集,java 会将 text/html 设置为 ISO-8859-1(这是 RFC-2854 中定义的默认值)。

您正在设置电子邮件 header 字段字符集。这不是正式的电子邮件 header 字段,这就是电子邮件客户端忽略它的原因。

关于java - 使用 html Java 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321672/

相关文章:

java 在应用程序级别同步数据库查询

Javafx如何触发舞台布局更新

php - 将 mySQL 中的阿拉伯语/日语转换为 php?

java - 如何使用java邮件发件人在电子邮件中发送链接

java - Android Handler 刷新 GUI

java - Guava 表并发修改异常

asp.net-mvc - ModelBinding 中的字符不正确

c# - Vici coolstorage 文本字段在 WP7 应用程序中未正确显示(某些字符丢失)

html - 在 Django 中发送 HTML 电子邮件

javascript - html mailto - 从变量插入邮件正文