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.后期补充。

 

时间: 2024-11-01 17:05:40

javaWeb开发小工具---MailUtils及其单元测试的相关文章

javaWeb开发小工具--MyCommonUtils

MyCommonUtils 参考一些资料,写了这个工具类.在这个工具类中,主要实现了2个方法: 1.生成随机的序列号 uuid(): 2.将Map中的数据封装到javaBean对象中toBean(Map map,Class<T> clazz): 编辑器:MyEclipse 10.0 1.依赖的jar包: 2.目录结构及日志文件的配置: 日志文件:log4j.properties 1 log4j.rootLogger=INFO, stdout, R 2 3 #\u5C06\u65E5\u5FD7

&lt;&lt;&lt; 日常辅助开发小工具

Notcpad++ Notepad++ 是一款非常有特色的编辑器,Notepad++是免费开源软件,内置支持多达 27 种语法高亮度显示 大小:7.3M FSCapture 无简介 大小:7.3M -------------------------------------------------------------------------------------------------------------------------------------------------------

Android 开发小工具之:Tools 属性 (转)

Android 开发小工具之:Tools 属性 http://blog.chengyunfeng.com/?p=755#ixzz4apLZhfmi 今天来介绍一些 Android 开发过程中比较有用但是大家又不常用的小工具.这些小工具可以提高 Android 应用开发的效率.还可以提高代码质量.所以还是有必要使用的. 首先介绍布局文件中的 tools 属性. 如果你用 Android Studio 创建一个简单的示例项目,在生成的布局文件中会有这么一行内容: xmlns:tools="http:

C# 接口开发小工具 笔记

做了2年的接口开发,主要给移动端提供接口,整理了一套小工具,在这里记录一下. 1.非空字段检测 接口某些字段不能为空,最开始进行空值检测是在方法里面,一个参数一个参数手动的检测是否为空,某些方法非空字段十几个的时候,代码臃肿,看着恶心,写着也烦,于是就利用特性和反射实现了自动空值检测. //特性声明 [AttributeUsage(AttributeTargets.Property)] public class NotNull : Attribute { } //使用方式 public clas

好用的前端开发小工具

这是一款集截屏(支持自定义尺寸).屏幕录影机.屏幕拾色器.屏幕放大镜.屏幕标尺.PDF图片转换.图片编辑等等诸多实用功能于一身的小工具, 完全免费,极限轻量化,软件总体积仅1.63 MB . 链接: https://pan.baidu.com/s/15Mii0BiLcD3Pr2_OXAkAWw 提取码: guqp 原文地址:https://www.cnblogs.com/lyyo/p/11491349.html

借开发小工具做工作感悟

近几个月,项目比较多,发现在开发自测的过程中比较麻烦,一句话就是反复重复,且效率也是一般的.感觉整个组都差不多的状态. 为了更高效的工作,开发一些小的工具.安逸这么久了,也该做些总结了. 工作总结: 毕业也快两年了,又是一次面临选择的时候来了.在目前的公司,生活很安逸,前一年工作不忙,后一年相对要忙一些,主要是自己独立负责了很多项目,而且还要写设计和开发,同时也要处理客户各种需求. 在一个成熟型的,传统型的大公司,最明显的一个特征就是技术相对旧一些,不过也是主流.稳定的技术.分工方面,也比较细.

xamarin开发的mac开发小工具集合

兄弟们我拖控件拖到了mac系统去了, 工具上传到百度网盘,下载地址 链接:https://pan.baidu.com/s/1Q64zoRjE3u66jJnzF8rhww提取码:ljx2 这款工具我是用微软的xamarin.mac技术开发的,驻留在menubar上如下图所示 Image是自动上传剪贴板的图片工具 Image是监听剪切板有没有复制图片,有的话自动把图片上传到服务器,并且生成一个 markdown的图片并且赋值到剪贴板,可以直接在写markdown的时候粘贴,是方便写markdwon插

Android 开发—— 小工具,大效率

欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:姚志锋 一.Hugo插件 -- 打印方法运行时间 首先申明下,此Hugo非 彼Hugo(Hugo是由Go语言实现的静态网站生成器). Hugo插件作用 : 能够计算并打印一个方法的输入参数和函数的运行时间 Hugo插件应用场景: 处理Android 应用卡顿问题 (1)先看实例 1)在对应方法处标注@DebugLog SearchResultPanel::dispatchResult处标记@Debug

Android 程序猿之必备10种开发小工具

十一提前放“价”,北风网折上折,送豪礼 具体活动详情请点击:http://www.ibeifeng.com/online101.html 活动时间:2014.9.24-2014.9.25 Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. #1: LogCat LogCat是Android中一个命令行工具,可以用于得到程序的log信息.Android日志系统提供了记录和查看系统调试信息的功能.日志都是从