javaWeb開發小工具---MailUtils及其單元測試

     本次介紹的是,在javaWeb開發中,咱們難免會遇到發送郵件的需求,好比:用戶註冊帳號,須要激活登陸,以及服務器按期向會員發送禮品信息等。因此參考有關資料,寫了這個MailUtils工具類。html

1.MailUtils的概述

     這個MailUtils工具類底層使用了javax.mail包裏面的API。因此咱們要導入依賴的jar包----mail.jar和activation.jar兩個jar包。java

  一封郵件基本由發件人、收件人、抄送人(可選)、標題、正文、附件組成。這裏咱們要介紹的是郵件的發送。服務器

在這個工具類中,主要有兩個方法,session

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

用來建立一個Session對象,參數爲服務器主機,用戶名,登陸密碼。在方法裏面通過設定主機、指定郵件協議、驗證登陸用戶、密碼等,以此完成Session的建立。工具

- send(Session session,final Mail mail)測試

經過建立的Session和Mail對象,來發送郵件,Mail對象中存放發件人的郵箱和收件人的郵箱。ui

2.MailUtils的實現

在編寫工具類過程當中,咱們要建立Mail郵件和AttachBean附件兩個實體對象。this

【代碼清單--1】Mail.javaspa

 

  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 Administrator
17  *
18  */
19 public class MailTest 
20 {
21     @Test
22     public void testSend() throws MessagingException, IOException
23     {
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.後期補充。

相關文章
相關標籤/搜索