2016-10-29 5 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

符号化setContent()方法のMIMEタイプ引数によって設定された電子メールのヘッダフィールドContent-Typeによって転送される:MIMEタイプに文字セットを設定しないことにより

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

、Javaはそれをセットしますtext/html〜ISO-8859-1(RFC-2854で定義されているデフォルト値)です。

電子メールヘッダーフィールドをcharsetに設定しています。これは正式に電子メールヘッダーフィールドではないため、電子メールクライアントによって無視される理由です。

+0

ありがとうございます。 – zzheads