zoukankan      html  css  js  c++  java
  • 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 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.后期补充。

     

  • 相关阅读:
    centos 6.5安装erlang和RabbitMQ
    vert.x学习(八),用JDBCClient配合c3p0操作数据库
    vert.x学习(七),使用表单获取用户提交的数据
    vert.x学习(六),动态模板与静态文件的结合
    vert.x学习(五),用StaticHandler来处理静态文件
    函数-生成器、迭代器
    函数装饰器
    函数参数、作用域、高阶函数、递归函数、高阶函数
    深浅拷贝、集合set、函数、日志
    第一部分day5 文件操作
  • 原文地址:https://www.cnblogs.com/lthIU/p/5925939.html
Copyright © 2011-2022 走看看