2016-10-29 3 views
0

Я отправляю электронное письмо с кодом 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>"; 

И электронная почта, которую я получил:

enter image description here

Что я пропустил?

ответ

1

Кодирование передается в поле заголовка электронной почты Content-Type, который задается типом мима аргументом setContent() метода:

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

не установки кодировки символов в типе мима, Java установит его для text/html - ISO-8859-1 (который является значением по умолчанию, определенным в RFC-2854).

Вы задаете поле заголовка электронной почты charset. Это не официальное поле заголовка электронной почты, и поэтому он игнорируется почтовым клиентом.

+0

Спасибо, это работает – zzheads

Смежные вопросы