Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(上)

在上一篇文章Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(上) 中,我们大概了解了一封邮件的组成。

下面我们完成发送有以下要求的邮件:

1.正文是一段html代码

2.这段html代码中内嵌一张图片

3.这封邮件包含两个附件

首先根据上篇文章最后的“邮件组织结构API”,分析以下有哪些MimeMultipart对象,有哪些MimeBodyPart对象。

1.有一个MimeMultipart对象msgPart,表示整封邮件的消息体,且消息体的multipart类型为mixed(有附件)。

2.msgPart应该有三个MimeBodyPart对象,分别为body(表示正文),attach1(表示附件1),attach2(表示附件2)

3.有一个MimeMultipart对象contentPart,表示正文的消息体且消息体的multipart类型为related(有图片内嵌资源)。而contentPart对象和body对象有关联

4..contentPart应该有两个MimeBodyPart对象,分别为content(表示正文的html代码),img(表示内嵌资源图片)

分析清楚MimeMultipart对象和MimeBodyPart对象以及他们之间的关系,代码写起来就很轻松了。

代码如下:

[java]  view plain  copy
  1. package com.zyh.demo;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.io.OutputStream;  
  6. import java.util.Properties;  
  7.   
  8. import javax.activation.DataHandler;  
  9. import javax.activation.FileDataSource;  
  10. import javax.mail.Message;  
  11. import javax.mail.Message.RecipientType;  
  12. import javax.mail.Multipart;  
  13. import javax.mail.Session;  
  14. import javax.mail.Transport;  
  15. import javax.mail.internet.InternetAddress;  
  16. import javax.mail.internet.MimeBodyPart;  
  17. import javax.mail.internet.MimeMessage;  
  18. import javax.mail.internet.MimeMultipart;  
  19. import javax.mail.util.ByteArrayDataSource;  
  20.   
  21. /** 
  22.  * 创建一个复杂的邮件,这个邮件包括一段正文和两个附件 
  23.  * 其中正文要包含一张图片 
  24.  * @author Administrator 
  25.  * 
  26.  */  
  27. public class Demo3 {  
  28.       
  29.     public static void main(String[] args) throws Exception {  
  30.         Properties props = new Properties();  
  31.         props.setProperty("mail.smtp.auth""true");  
  32.         props.setProperty("mail.transport.protocol""smtp");  
  33.           
  34.         Session session = Session.getInstance(props);  
  35.         session.setDebug(true);  
  36.           
  37.         Message msg = new MimeMessage(session);  
  38.         /*邮件消息头设置*/  
  39.         msg.setFrom(new InternetAddress("[email protected]"));  
  40.         msg.setRecipients(RecipientType.TO, InternetAddress.parse("[email protected],[email protected],[email protected],[email protected]"));  
  41.         msg.setSubject("From sohu 这是一封复杂邮件");  
  42.           
  43.         /*邮件消息内容设置,包括两个附件和一段正文*/  
  44.         Multipart msgPart = new MimeMultipart("mixed");  
  45.         msg.setContent(msgPart);          
  46.           
  47.         MimeBodyPart body = new MimeBodyPart();     //表示正文  
  48.         MimeBodyPart attach1 = new MimeBodyPart();  //表示附件1  
  49.         MimeBodyPart attach2 = new MimeBodyPart();  //表示附件2  
  50.         msgPart.addBodyPart(body);  
  51.         msgPart.addBodyPart(attach1);  
  52.         msgPart.addBodyPart(attach2);  
  53.           
  54.         /*以下为设置正文*/  
  55.         /*正文是文字和图片混合的*/  
  56.         Multipart contentPart = new MimeMultipart("related");  
  57.         body.setContent(contentPart);  
  58.         MimeBodyPart content = new MimeBodyPart(); //文字  
  59.         MimeBodyPart img = new MimeBodyPart();     //图片  
  60.         contentPart.addBodyPart(content);  
  61.         contentPart.addBodyPart(img);  
  62.           
  63.         ByteArrayDataSource fileds = new ByteArrayDataSource(new FileInputStream("D:\\picture\\jpg\\touxiang.jpg"),"application/octet-stream");    
  64.         DataHandler imgDataHandler = new DataHandler(fileds);  
  65. //      DataSource imgds = new FileDataSource("D:\\picture\\jpg\\touxiang.jpg");  
  66. //      DataHandler imgDataHandler = new DataHandler(imgds);  
  67.         img.setDataHandler(imgDataHandler);  
  68.         //注意:Content-ID的属性值一定要加上<>,不能是touxiang.jpg  
  69.         img.setHeader("Content-ID""<touxiang.jpg>");  
  70.         //为图片设置文件名,有的邮箱会把html内嵌的图片也当成附件  
  71.         img.setFileName("touxianga.jpg");  
  72.         //设置文字内容  
  73.         /** 
  74.          * 注意:在html代码中要想显示刚才的touxiang.jpg 
  75.          * src里不能直接写Content-ID的值,要用cid:这种方式 
  76.          */  
  77.         content.setContent("<div style='color:red;font-size:18px;'>从sohu发来的邮件</div>:我这里有一张图片<img src='cid:touxiang.jpg' alt='touxiang' width=\"100px\" height='100px' />,好看吗?""text/html;charset=utf-8");  
  78.         /*正文内容设置结束*/  
  79.           
  80.         /*下面为设置附件*/  
  81.         attach1.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\firefox.txt")));  
  82.         attach1.setFileName("file1.txt");  
  83.         attach2.setDataHandler(new DataHandler(new FileDataSource("E:\\others\\java.txt")));  
  84.         attach2.setFileName("file2.txt");  
  85.           
  86.         msg.saveChanges();  
  87.         //把邮件以文件的形式写入到磁盘  
  88.         OutputStream os = new FileOutputStream("E:\\others\\demo.eml");  
  89.         msg.writeTo(os);  
  90.         os.close();  
  91.           
  92.         Transport trans = session.getTransport();  
  93.         trans.connect("smtp.sohu.com"25"zyh5540""test");  
  94.         trans.sendMessage(msg,msg.getAllRecipients());  
  95.     }  
  96. }  

附:

1.JavaMail开发jar包下载地址:http://download.csdn.net/download/zyh5540/6900667

2.参考代码下载地址:http://download.csdn.net/download/zyh5540/6907731

猜你喜欢

转载自blog.csdn.net/angel_g/article/details/76685715