使用 html Java 发送电子邮件

Send email with html Java

我正在发送内含 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>";

以及我收到的电子邮件:

我错过了什么?

通过emailheader字段Content-Type传输编码,由setContent()方法的mime类型参数设置:

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

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

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