2011-03-07 119 views
51

我必須通過電子郵件發送HTML文件,但不能作爲附件發送。如何發送HTML電子郵件

Message simpleMessage = new MimeMessage(mailSession); 
try { 
    fromAddress = new InternetAddress(from); 
    toAddress = new InternetAddress(to); 

} catch (AddressException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

try { 
    simpleMessage.setFrom(fromAddress); 
    simpleMessage.setRecipient(RecipientType.TO, toAddress); 

    simpleMessage.setSubject(subject); 
    simpleMessage.setText(text); 

    Transport.send(simpleMessage); 
} catch (MessagingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

它只是簡單地用短信發送電子郵件。 我想送存儲在另一個文件中,但不作爲附件

+3

你應該真的[接受你的問題一些答案](http://stackoverflow.com/faq#howtoask)。 – dkarp 2011-03-08 18:36:51

回答

104

不要上溯造型你MimeMessageMessage HTML內容:

MimeMessage simpleMessage = new MimeMessage(mailSession); 

然後,當你想設置郵件正文,無論是通話

simpleMessage.setText(text, "utf-8", "html"); 

或致電

simpleMessage.setContent(text, "text/html; charset=utf-8"); 

如果您寧願使用utf-8以外的字符集,請將其替換爲適當的位置。

JavaMail中有抽象,往往讓你​​抱着類,如MultipartMessage,和Address額外的,無用的層,它們都具有比實際得到構建真正的子類(MimeMultipartMimeMessageInternetAddress)少得多的功能...

+0

我正在使用'simpleMessage.setContent(text,「text/html; charset = utf-8」)有問題的代碼;'設置內容,但是在做這件事的時候,我在每個內容中都有一個問號'='它被轉換爲'= 3D',這可以防止HTML屬性被正確設置,任何想法爲什麼? – mohamnag 2015-09-21 13:53:52

+1

@mohamnag您可能會注意到,所產生的消息具有標題「Content-Transfer-Encoding:quoted-printable」。 (這可能是因爲你的HTML部分包含非ASCII文本,並且電子郵件不喜歡非ASCII內容。)郵件的收件人需要傳輸解碼郵件內容以將這些「= 3D」回到'='s。嘗試在收件人一方使用'MimeMessage.getInputStream'而不是'MimeMessage.getContentStream'。 – dkarp 2015-09-21 20:59:09

+0

@dkrap感謝提及它,我忽略了傳輸編碼,導致HTML沒有正確顯示。 – mohamnag 2015-09-22 14:37:40