2016-10-29 190 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()方法的mime類型參數設置轉移:

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

通過在mime類型不設置字符集,java會設置爲text/html轉換爲ISO-8859-1(這是RFC-2854中定義的默認值)。

您正在設置電子郵件標頭字段charset。這不是一個正式的電子郵件標題字段,這就是爲什麼它被電子郵件客戶端忽略。

+0

謝謝,它的工作原理 – zzheads