首页 > 代码库 > javaWeb开发小工具---MailUtils及其单元测试

javaWeb开发小工具---MailUtils及其单元测试

     本次介绍的是,在javaWeb开发中,我们不免会遇到发送邮件的需求,比如:用户注册账号,需要激活登录,以及服务器定期向会员发送礼品信息等。所以参考有关资料,写了这个MailUtils工具类。

1.MailUtils的概述

     这个MailUtils工具类底层使用了javax.mail包里面的API。所以我们要导入依赖的jar包----mail.jar和activation.jar两个jar包。

  一封邮件基本由发件人、收件人、抄送人(可选)、标题、正文、附件组成。这里我们要介绍的是邮件的发送。

在这个工具类中,主要有两个方法,

- createSession(String host,final String userName,final String passWord)

用来创建一个Session对象,参数为服务器主机,用户名,登录密码。在方法里面经过设定主机、指定邮件协议、验证登录用户、密码等,以此完成Session的创建。

- send(Session session,final Mail mail)

通过创建的Session和Mail对象,来发送邮件,Mail对象中存放发件人的邮箱和收件人的邮箱。

2.MailUtils的实现

在编写工具类过程中,我们要创建Mail邮件和AttachBean附件两个实体对象。

【代码清单--1】Mail.java

 

  1 package com.lxf.bean;  2   3 import java.util.ArrayList;  4 import java.util.List;  5   6 /**  7  * 邮件类  8  * 包括:发件人,收件人,抄送(可选),主题,正文,附件  9  * @author Administrator 10  * 11  */ 12 public class Mail  13 { 14     //发件人 15     private String from; 16     //收件人 17     private StringBuilder toAddress = new StringBuilder(); 18     //抄送 19     private StringBuilder ccAddress = new StringBuilder(); 20     //主题 21     private String subject; 22     //正文 23     private String content; 24     //附件列表 25     private List<AttachBean> list = new ArrayList<AttachBean>(); 26      27     public Mail() 28     { 29     } 30      31     public Mail(String from, String to)  32     { 33         this(from,to,null,null); 34     } 35  36     public Mail(String from,String to,String subject,String content) 37     { 38         this.from = from; 39         this.toAddress.append(to); 40         this.subject = subject; 41         this.content = content; 42     } 43      44     public String getFrom()  45     { 46         return from; 47     } 48     public void setFrom(String from) 49     { 50         this.from = from; 51     } 52      53     public String getToAddress() 54     { 55         return toAddress.toString(); 56     } 57      58     public void ADDToAddress(String to) 59     { 60         if(this.toAddress.length() > 0) 61         { 62             toAddress.append(","); 63         } 64         this.toAddress .append(to); 65     } 66      67     public String getCcAddress()  68     { 69         return ccAddress.toString(); 70     } 71     public void addCcAddress(String cc) 72     { 73         if(this.ccAddress.length() > 0) 74         { 75             this.ccAddress.append(","); 76         } 77         this.ccAddress.append(cc); 78     } 79      80     public String getSubject()  81     { 82         return subject; 83     } 84     public void setSubject(String subject) 85     { 86         this.subject = subject; 87     } 88     public String getContent()  89     { 90         return content; 91     } 92     public void setContent(String content) 93     { 94         this.content = content; 95     } 96     public List<AttachBean> getAttachs()  97     { 98         return list; 99     }100     public void setList(AttachBean attachBean)101     {102         this.list.add(attachBean);103     }104 105 }

 

【代码清单--2】 AttachBean.java(附件:文件序号、文件、文件名)

 1 package com.lxf.bean; 2  3 import java.io.File; 4  5 public class AttachBean  6 { 7     //序号,文件,文件名 8     private String cid; 9     private File file;10     private String fileName;11     12     public AttachBean()13     {14     }15 16     public AttachBean(String cid, File file, String fileName) 17     {18         super();19         this.cid = cid;20         this.file = file;21         this.fileName = fileName;22     }23 24     public String getCid() 25     {26         return cid;27     }28 29     public void setCid(String cid)30     {31         this.cid = cid;32     }33 34     public File getFile() 35     {36         return file;37     }38 39     public void setFile(File file) 40     {41         this.file = file;42     }43 44     public String getFileName() 45     {46         return fileName;47     }48 49     public void setFileName(String fileName)50     {51         this.fileName = fileName;52     }53 54 }

 

【代码清单--3】MailUtils.java 邮件工具类 ---用来发送邮件

  1 package com.lxf.myCommonUtils;  2   3 import java.io.IOException;  4 import java.util.List;  5 import java.util.Properties;  6   7 import javax.mail.Authenticator;  8 import javax.mail.Message.RecipientType;  9 import javax.mail.MessagingException; 10 import javax.mail.PasswordAuthentication; 11 import javax.mail.Session; 12 import javax.mail.Transport; 13 import javax.mail.internet.InternetAddress; 14 import javax.mail.internet.MimeBodyPart; 15 import javax.mail.internet.MimeMessage; 16 import javax.mail.internet.MimeMultipart; 17 import javax.mail.internet.MimeUtility; 18  19 import com.lxf.bean.AttachBean; 20 import com.lxf.bean.Mail; 21  22 /** 23  * 邮件工具类 ---用来发送邮件 24  * 该工具类底层运用到了javaMail,因此需要引入两个jar包 25  *  26  * mail.jar  activator.jar 27  * @author Administrator 28  * 29  */ 30 public class MailUtils  31 { 32     //创建session对象。 33     public static Session createSession(String host,final String userName,final String passWord) 34     { 35         Properties prop = new Properties(); 36         //设定主机 37         prop.setProperty("mail.host", host); 38         //指定邮件协议,验证为true 39         prop.setProperty("mail.smtp.auth", "true"); 40          41         //创建验证器 42         Authenticator auth = new Authenticator(){ 43             public PasswordAuthentication getPasswordAuthenticator() 44             { 45                 return new PasswordAuthentication(userName,passWord); 46             } 47         }; 48         return Session.getInstance(prop, auth); 49     } 50      51     public static void send(Session session,final Mail mail) throws MessagingException, MessagingException, IOException 52     { 53         //创建邮件对象 54         MimeMessage msg = new MimeMessage(session); 55         //设置发件人 56         msg.setFrom(new InternetAddress(mail.getFrom())); 57         msg.addRecipients(RecipientType.TO, mail.getToAddress()); 58          59         //设置抄送 60         String cc = mail.getCcAddress(); 61         if(!cc.isEmpty()) 62         { 63             msg.addRecipients(RecipientType.CC, cc); 64         } 65          66         //设置主题 67         msg.setSubject(mail.getSubject()); 68          69         //创建部件集对象 70         MimeMultipart parts = new MimeMultipart(); 71          72         //创建一个部件 73         MimeBodyPart part = new MimeBodyPart(); 74          75         //设置邮件正文内容 76         part.setContent(mail.getContent(),"text/html;charset=utf-8"); 77         //把部件加到部件集中 78         parts.addBodyPart(part); 79          80         //获取所有附件 81         List<AttachBean> list = mail.getAttachs(); 82         if(null != list) 83         { 84             for(AttachBean attach :list) 85             { 86                 //创建一个部件 87                 MimeBodyPart attachPart = new MimeBodyPart(); 88                 //设置附件文件 89                 attachPart.attachFile(attach.getFile()); 90                 //设置附件文件名 91                 attachPart.setFileName(MimeUtility.encodeText(attach.getFileName())); 92                 String cid = attach.getCid(); 93                 if(cid != null) 94                 { 95                     attachPart.setContentID(cid); 96                 } 97                 parts.addBodyPart(attachPart); 98             } 99         }100         //给邮件设置内容101         msg.setContent(parts);102         Transport.send(msg);103     }104 }

3.MailUtils的测试

这里要测试的就是邮件的正确发送,主要验证send()方法。

【代码清单--4】

 1 package com.lxf.test; 2  3 import java.io.IOException; 4  5 import javax.mail.MessagingException; 6 import javax.mail.Session; 7  8 import org.junit.Test; 9 10 import com.lxf.bean.Mail;11 import com.lxf.myCommonUtils.MailUtils;12 13 14 /**15  * 邮件测试类16  * @author Administrator17  *18  */19 public class MailTest 20 {21     @Test22     public void testSend() throws MessagingException, IOException23     {24         //创建Session对象,指定主机,用户名,密码25         //这里假设用163邮箱,smtp是邮件协议。26         Session session = MailUtils.createSession("smtp.163.com", "这里输入邮箱@前面的信息", "邮箱密码");27         28         //创建一个Mail对象,设置发件人和收件人29         Mail mail = new Mail("你的邮箱完整信息","对方邮箱完整信息");30         //设置主题31         mail.setSubject("给**的100封信");32         //设置正文33         mail.setContent("这时第1封信");34         //发送邮件35         MailUtils.send(session, mail);36     }37 }

 

 这里要说的是,当你在测试的话,可能会下面抛出这个异常。

技术分享

这时因为你的邮箱在注册的时候没有勾选开启,用代码发送邮件的协议,也就是上面的那个smtp协议,所有,我们要正确开启,才能把邮件发送出去。

这里我已QQ邮箱为例,来介绍一下怎么开启smtp协议。

1.打开你的qq邮箱,点击你的用户名,则进入【邮箱设置】界面;

技术分享

2.在【账户】信息栏,下拉,找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”项。

技术分享

大家可以看到,SMTP服务是默认关闭的,此时我们就要申请把它打开。

最后大家在测试的话吗,邮件就会发送成功。

4.后期补充。

 

 

 

javaWeb开发小工具---MailUtils及其单元测试