2010-12-22 337 views
3

我順利通過Gmail SMTP服務器使用下面的一段代碼發送電子郵件:使用JavaMail發送包含Unicode字符的郵件

 Properties props = new Properties(); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 
     props.put("mail.smtp.ssl", "true");     
     props.put("mail.smtp.starttls.enable","true"); 
     props.put("mail.smtp.timeout", "5000");    
     props.put("mail.smtp.connectiontimeout", "5000"); 

     // Do NOT use Session.getDefaultInstance but Session.getInstance 
     // See: http://forums.sun.com/thread.jspa?threadID=5301696 
     final Session session = Session.getInstance(props, 
       new javax.mail.Authenticator() { 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(USER, PWD); 
        } 
       }); 

     try { 
      final Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(USER)); 
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(TO)); 
      message.setSubject(emailSubject); 
      message.setText(emailContent); 
      Transport.send(message); 
      emailSent = true; 
     } catch (final MessagingException e) { 
      e.printStackTrace(); 
     } 

其中emailContent字符串不會包含Unicode字符(如歐元符號)。

當電子郵件到達(在另一個GMail帳戶中)時,歐元符號已被轉換爲ASCII'?'問號。

我對電子郵件瞭解不多:電子郵件可以使用任何字符編碼嗎?

我應該在上面的代碼中修改什麼,以便使用允許使用Unicode字符的編碼?

回答

4

您將需要指定內容類型的MIME標頭,告訴它你想用UTF-8發送電子郵件。

使用MimeMessage並使用兩個參數調用setText,傳入字符集。

+0

哪裏/我該怎麼辦需要這樣做? – NoozNooz42 2010-12-22 17:41:31

+1

而不是調用message.setText(emailContent),你想調用message.setText(emailContent,「utf-8」)。這是更正確的方法。 – dkarp 2010-12-30 19:23:47

13

回答我的問題:你需要使用的setHeader方法從消息類,像這樣(以下已審結,這是工作):

message.setHeader("Content-Type", "text/plain; charset=UTF-8"); 
相關問題