2009年12月30日

Java:以javamail寄送附件圖檔與html格式email教學


 
在看這篇教學前,你應該要先將 javamail 相關設定完成,
下載點在:http://java.sun.com/products/javamail/downloads/index.html
API 文件:http://java.sun.com/products/javamail/javadocs/index.html
若你需要 source code 可見:http://kenai.com/projects/javamail/downloads

使用 java 寄信時我們常用 javamail,
然而很多人都只會寄純文字信件或單純的 html郵件,
如果你想先知道要怎麼寄純文字的信件的話,
這個連結有很詳細的 code :Send email with JavaMail

學會了寄純文字和html,但是要怎麼把附件的圖顯示在 html中呢?
直接看下面的程式就可以明白了,超簡單的!
  1. import java.util.Properties;

  2. import javax.activation.DataHandler;
  3. import javax.activation.FileDataSource;
  4. import javax.mail.*;
  5. import javax.mail.internet.*;

  6. public class SendMailDemo {

  7. /**
  8. * Java:以javamail寄送附件圖檔與html格式email教學
  9. *
  10. * @author werdna at http://werdna1222coldcodes.blogspot.com/
  11. */
  12. public static void main(String[] args) {

  13. try {

  14. // 初始設定,username 和 password 非必要
  15. Properties props = new Properties();
  16. props.setProperty("mail.transport.protocol", "smtp");
  17. props.setProperty("mail.host", "yourmailserver.location.or.ip");
  18. //props.setProperty("mail.user", "ifUserNameNeeded");
  19. //props.setProperty("mail.password", "ifPasswordNeeded");

  20. Session mailSession = Session.getDefaultInstance(props, null);
  21. Transport transport = mailSession.getTransport();

  22. // 產生整封 email 的主體 message
  23. MimeMessage message = new MimeMessage(mailSession);

  24. // 設定主旨
  25. message.setSubject("Javamail with picture attachment and html contents.");

  26. // 文字部份,注意 img src 部份要用 cid:接下面附檔的header
  27. MimeBodyPart textPart = new MimeBodyPart();
  28. StringBuffer html = new StringBuffer();
  29. html.append("<h2>這是第一行</h2><br>");
  30. html.append("<h3>這是第二行,下面會是圖</h3><br>");
  31. html.append("<img src='cid:image'/><br>");
  32. textPart.setContent(html.toString(), "text/html; charset=UTF-8");

  33. // 圖檔部份,注意 html 用 cid:image,則header要設<image>
  34. MimeBodyPart picturePart = new MimeBodyPart();
  35. FileDataSource fds = new FileDataSource("YourPictureFile.jpg");
  36. picturePart.setDataHandler(new DataHandler(fds));
  37. picturePart.setFileName(fds.getName());
  38. picturePart.setHeader("Content-ID", "<image>");

  39. Multipart email = new MimeMultipart();
  40. email.addBodyPart(textPart);
  41. email.addBodyPart(picturePart);

  42. message.setContent(email);
  43. message.addRecipient(Message.RecipientType.TO, new InternetAddress(
  44. "youremail@address"));
  45. transport.connect();
  46. transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO))
  47. ;
  48. transport.close();
  49. } catch (AddressException e) {
  50. e.printStackTrace();
  51. } catch (NoSuchProviderException e) {
  52. e.printStackTrace();
  53. } catch (MessagingException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. }
執行完後的結果會像這樣,是不是超簡單的呢?



關鍵字:mail, email, picture, image, 附檔, 附件, html, javamail, 程式, 教學, 範例
參考資料:
  1. Javamail
  2. Send email with JavaMail
  3. mail寄送附件圖檔與html format的疑問 [精華]


更多精選推薦文章

0 意見 :