码迷,mamicode.com
首页 > 编程语言 > 详细

带有附件及图片正文的JavaMail邮件发送

时间:2014-09-19 11:35:15      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   使用   java   ar   文件   

  1 package javamail;
  2 
  3 import java.io.UnsupportedEncodingException;
  4 import java.util.Properties;
  5 
  6 import javax.activation.DataHandler;
  7 import javax.activation.FileDataSource;
  8 import javax.mail.Message;
  9 import javax.mail.Message.RecipientType;
 10 import javax.mail.Authenticator;
 11 import javax.mail.MessagingException;
 12 import javax.mail.Multipart;
 13 import javax.mail.PasswordAuthentication;
 14 import javax.mail.Session;
 15 import javax.mail.Transport;
 16 import javax.mail.internet.AddressException;
 17 import javax.mail.internet.InternetAddress;
 18 import javax.mail.internet.MimeBodyPart;
 19 import javax.mail.internet.MimeMessage;
 20 import javax.mail.internet.MimeMultipart;
 21 import javax.mail.internet.MimeUtility;
 22 
 23 public class TestMail03 {
 24     public static void main(String[] args) {
 25         try {
 26             Properties props = new Properties();
 27             props.setProperty("mail.transport.protocol", "smtp");
 28             /**
 29              * 设置发送邮件的服务器,不同的邮箱服务器不一致,可以在邮箱的帮助中查询
 30              */
 31             props.setProperty("mail.host", "smtp.126.com");
 32             /**
 33              * 设置发送服务器验证,一些邮箱需要增加这个验证才能发送邮件
 34              */
 35             props.setProperty("mail.smtp.auth", "true");
 36             /**
 37              * 当需要使用Transport.send发送时,需要将用户名和密码设置到Session中
 38              */
 39             Session session = Session.getDefaultInstance(props,new Authenticator() {
 40                 /**
 41                  * 通过Authenticator中 的getPasswordAuthentication的方法来设置邮箱的用户名和密码
 42                  */
 43                 @Override
 44                 protected PasswordAuthentication getPasswordAuthentication() {
 45                     return new PasswordAuthentication("xiaohui390", "soul-390");
 46                 }
 47             });
 48             
 49             session.setDebug(true);
 50             
 51             Message msg = new MimeMessage(session);
 52             /**
 53              * 使用MimeUtility.encodeText可以将中文编码
 54              */
 55             msg.setFrom(new InternetAddress(MimeUtility.encodeText("王辉")+"<xiaohui390@126.com>"));
 56             msg.setRecipient(RecipientType.TO,new InternetAddress(MimeUtility.encodeText("阿飞")+"<415519522@qq.com>"));
 57             msg.setSubject("一封邮件");
 58             
 59             /**
 60              * 创建整个邮件的Multipart,因为邮件的内容已经不仅仅只是纯文本或者纯html文本,而需要添加
 61              * 相应的附件,此时就得通过Multipart来创建
 62              */
 63             Multipart emailPart = new MimeMultipart();
 64             /**
 65              * Multipart不能直接加入内容,需要通过BodyPart来加入内容,假设有两个附件就需要三个BodyPart
 66              * 两个用来存储附件,一个用来存储邮件的正文
 67              */
 68             MimeBodyPart att1 = new MimeBodyPart();
 69             /**
 70              * 为第一个附件设置文件,DataHandler是在JAF包中,如果使用的是jdk1.4的版本需要手动下载这个包
 71              */
 72             att1.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt")));
 73             att1.setFileName("1.txt");
 74             /**
 75              * 创建了第二个附件
 76              */
 77             MimeBodyPart att2 = new MimeBodyPart();
 78             att2.setDataHandler(new DataHandler(new FileDataSource("d:/1.txt")));
 79             //要解决中文的问题需要通过一个MimeUtility这个类来编码中文
 80             att2.setFileName(MimeUtility.encodeText("你好.txt"));
 81             
 82             MimeBodyPart content = new MimeBodyPart();
 83             /**
 84              * 由于文件的正文还有图片和内容,所以也需要通过Multipart来创建
 85              */
 86             MimeMultipart contentMultipart = new MimeMultipart();
 87             /**
 88              * 然后再创建相应的BodyPart来设置内容
 89              */
 90             MimeBodyPart imgBody = new MimeBodyPart();
 91             /**
 92              * 创建了正文中的图片内容
 93              */
 94             imgBody.setDataHandler(new DataHandler(new FileDataSource("d:/02.jpg")));
 95             /**
 96              * 为这个图片设置一个id,在正文中可以通过cid:xxx来访问
 97              */
 98             imgBody.setContentID("smile");
 99             
100             MimeBodyPart htmlBody = new MimeBodyPart();
101             htmlBody.setContent("<h1>这个是一个带有附件的图片</h1><img src=‘cid:smile‘/>", "text/html;charset=utf-8");
102             
103             
104             contentMultipart.addBodyPart(imgBody);
105             contentMultipart.addBodyPart(htmlBody);
106             //完成了邮件正文的设置
107             content.setContent(contentMultipart);
108             
109             /**
110              * 设置邮件的信息
111              */
112             //添加第一个附件
113             emailPart.addBodyPart(att1);
114             //添加第二个附件
115             emailPart.addBodyPart(att2);
116             //添加邮件正文
117             emailPart.addBodyPart(content);
118             //设置邮件的信息
119             msg.setContent(emailPart);
120             
121             Transport.send(msg);
122         } catch (AddressException e) {
123             e.printStackTrace();
124         } catch (MessagingException e) {
125             e.printStackTrace();
126         } catch (UnsupportedEncodingException e) {
127             e.printStackTrace();
128         }
129         
130     }
131 }

 

带有附件及图片正文的JavaMail邮件发送

标签:style   blog   color   io   os   使用   java   ar   文件   

原文地址:http://www.cnblogs.com/wanghui390/p/3980897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!