本次介绍的是,在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

 package com.lxf.bean;

 import java.util.ArrayList;
import java.util.List; /**
* 邮件类
* 包括:发件人,收件人,抄送(可选),主题,正文,附件
* @author Administrator
*
*/
public class Mail
{
//发件人
private String from;
//收件人
private StringBuilder toAddress = new StringBuilder();
//抄送
private StringBuilder ccAddress = new StringBuilder();
//主题
private String subject;
//正文
private String content;
//附件列表
private List<AttachBean> list = new ArrayList<AttachBean>(); public Mail()
{
} public Mail(String from, String to)
{
this(from,to,null,null);
} public Mail(String from,String to,String subject,String content)
{
this.from = from;
this.toAddress.append(to);
this.subject = subject;
this.content = content;
} public String getFrom()
{
return from;
}
public void setFrom(String from)
{
this.from = from;
} public String getToAddress()
{
return toAddress.toString();
} public void ADDToAddress(String to)
{
if(this.toAddress.length() > 0)
{
toAddress.append(",");
}
this.toAddress .append(to);
} public String getCcAddress()
{
return ccAddress.toString();
}
public void addCcAddress(String cc)
{
if(this.ccAddress.length() > 0)
{
this.ccAddress.append(",");
}
this.ccAddress.append(cc);
} public String getSubject()
{
return subject;
}
public void setSubject(String subject)
{
this.subject = subject;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public List<AttachBean> getAttachs()
{
return list;
}
public void setList(AttachBean attachBean)
{
this.list.add(attachBean);
} }

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

 package com.lxf.bean;

 import java.io.File;

 public class AttachBean
{
//序号,文件,文件名
private String cid;
private File file;
private String fileName; public AttachBean()
{
} public AttachBean(String cid, File file, String fileName)
{
super();
this.cid = cid;
this.file = file;
this.fileName = fileName;
} public String getCid()
{
return cid;
} public void setCid(String cid)
{
this.cid = cid;
} public File getFile()
{
return file;
} public void setFile(File file)
{
this.file = file;
} public String getFileName()
{
return fileName;
} public void setFileName(String fileName)
{
this.fileName = fileName;
} }

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

 package com.lxf.myCommonUtils;

 import java.io.IOException;
import java.util.List;
import java.util.Properties; import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility; import com.lxf.bean.AttachBean;
import com.lxf.bean.Mail; /**
* 邮件工具类 ---用来发送邮件
* 该工具类底层运用到了javaMail,因此需要引入两个jar包
*
* mail.jar activator.jar
* @author Administrator
*
*/
public class MailUtils
{
//创建session对象。
public static Session createSession(String host,final String userName,final String passWord)
{
Properties prop = new Properties();
//设定主机
prop.setProperty("mail.host", host);
//指定邮件协议,验证为true
prop.setProperty("mail.smtp.auth", "true"); //创建验证器
Authenticator auth = new Authenticator(){
public PasswordAuthentication getPasswordAuthenticator()
{
return new PasswordAuthentication(userName,passWord);
}
};
return Session.getInstance(prop, auth);
} public static void send(Session session,final Mail mail) throws MessagingException, MessagingException, IOException
{
//创建邮件对象
MimeMessage msg = new MimeMessage(session);
//设置发件人
msg.setFrom(new InternetAddress(mail.getFrom()));
msg.addRecipients(RecipientType.TO, mail.getToAddress()); //设置抄送
String cc = mail.getCcAddress();
if(!cc.isEmpty())
{
msg.addRecipients(RecipientType.CC, cc);
} //设置主题
msg.setSubject(mail.getSubject()); //创建部件集对象
MimeMultipart parts = new MimeMultipart(); //创建一个部件
MimeBodyPart part = new MimeBodyPart(); //设置邮件正文内容
part.setContent(mail.getContent(),"text/html;charset=utf-8");
//把部件加到部件集中
parts.addBodyPart(part); //获取所有附件
List<AttachBean> list = mail.getAttachs();
if(null != list)
{
for(AttachBean attach :list)
{
//创建一个部件
MimeBodyPart attachPart = new MimeBodyPart();
//设置附件文件
attachPart.attachFile(attach.getFile());
//设置附件文件名
attachPart.setFileName(MimeUtility.encodeText(attach.getFileName()));
String cid = attach.getCid();
if(cid != null)
{
attachPart.setContentID(cid);
}
parts.addBodyPart(attachPart);
}
}
//给邮件设置内容
msg.setContent(parts);
Transport.send(msg);
}
}

3.MailUtils的测试

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

【代码清单--4】

 package com.lxf.test;

 import java.io.IOException;

 import javax.mail.MessagingException;
import javax.mail.Session; import org.junit.Test; import com.lxf.bean.Mail;
import com.lxf.myCommonUtils.MailUtils; /**
* 邮件测试类
* @author Administrator
*
*/
public class MailTest
{
@Test
public void testSend() throws MessagingException, IOException
{
//创建Session对象,指定主机,用户名,密码
//这里假设用163邮箱,smtp是邮件协议。
Session session = MailUtils.createSession("smtp.163.com", "这里输入邮箱@前面的信息", "邮箱密码"); //创建一个Mail对象,设置发件人和收件人
Mail mail = new Mail("你的邮箱完整信息","对方邮箱完整信息");
//设置主题
mail.setSubject("给**的100封信");
//设置正文
mail.setContent("这时第1封信");
//发送邮件
MailUtils.send(session, mail);
}
}

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

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

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

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

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

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

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

4.后期补充。

 

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

  1. javaWeb开发小工具--MyCommonUtils

    MyCommonUtils 参考一些资料,写了这个工具类.在这个工具类中,主要实现了2个方法: 1.生成随机的序列号 uuid(): 2.将Map中的数据封装到javaBean对象中toBean(Ma ...

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

    Android 开发小工具之:Tools 属性 http://blog.chengyunfeng.com/?p=755#ixzz4apLZhfmi 今天来介绍一些 Android 开发过程中比较有用但 ...

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

    兄弟们我拖控件拖到了mac系统去了, 工具上传到百度网盘,下载地址 链接:https://pan.baidu.com/s/1Q64zoRjE3u66jJnzF8rhww提取码:ljx2 这款工具我是用 ...

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

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:姚志锋 一.Hugo插件 -- 打印方法运行时间 首先申明下,此Hugo非 彼Hugo(Hugo是由Go ...

  5. JDBC小工具--TxQueryRunner及其单元测试

    1.TxQueryRunner的简介(需要相关jar包的请留言) TxQueryRunner类是common-dbutils下QueryRunner的子类,是用来简化JDBC操作的,所以要导入comm ...

  6. CSS便捷开发小工具汇总

    1.Prefix free 可以帮助开发者省去编写各种CSS3属性前缀的工作,只需要在页面中引入prefixfree.js即可. 2. Normalize 是一个CSS Reset工具, 相比传统的R ...

  7. Qt开发小工具之gif转换器(使用QMovie截取每一帧为QImage,然后用QFile另存为图片文件)

    最近,QQ上好多各种gif表情.每一个都很经典呀..于是我就想把它转换成一张张静态图片...没学过ps.于是写了几行代码.完工.核心代码如下 主要是借助QMovie类.文件读取模式选择QMovie:: ...

  8. android 开发小工具收集

    http://blog.csdn.net/tikitoo/article/details/51089422

  9. Java开发 小工具累计

    array to list Integer[] spam = new Integer[] { 1, 2, 3 }; List<Integer> rlt = Arrays.asList(sp ...

随机推荐

  1. Acadia Lab 203 + Lab 231

    在做完 Lab 6 之后,惊觉选做实验缺口很大,于是遍历了一遍夏任务,找到了一条最省力的路线. 做完 Lab 6 的连线不用拆,可以接下来做以下两个实验: Lab 203 网络时钟 核心代码如下: v ...

  2. Debug模式下编译溢出问题

    问题: 代码在Debug模式下编译报出内存溢出的错误,而Release模式下则没有. 由于Debug模式下包含调试信息,并且不作任何优化.而Release模式进行了各种优化,内存检测等操作均省去,使得 ...

  3. java.lang.IllegalStateException: Couldn't read row 1, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data fr

    Android中操作Sqlite遇到的错误:java.lang.IllegalStateException: Couldn't read row 1, col 0 from CursorWindow. ...

  4. javascript [object,Object]

    今天给html标签的属性赋值为对象时,发现取出来的值为 [object,Object],感觉有点奇怪. 代码如下: <!DOCTYPE html> <html> <hea ...

  5. C# 获取本机CPU序列号,MAC地址,硬盘ID,本机IP地址,计算机名,物理内存,PC类型

    首先引入服务 然后 调用 本文转载自http://blog.sina.com.cn/s/blog_7eeb43210101hf7f.html public class Computer { publi ...

  6. Dev WPF使用总结

    1.换肤 ThemeManager.ApplicationThemeName = Theme.DXStyle.Name this.UpdateLayout(); //重新布局

  7. Oracle数据库自动启动Shell脚本

      为了保证Oracle在下次系统重启后,能自动启动服务,这里我们可以通过一个Shell脚步来实现这个功能.假定脚步名称为/app/oracle/oraclestart.sh,其内容如下: #!/bi ...

  8. ubuntu14.04 安装系统

    p { margin-bottom: 0.1in; line-height: 120% } code.cjk { font-family: "Droid Sans Fallback" ...

  9. Java广度优先爬虫示例(抓取复旦新闻信息)

    一.使用的技术 这个爬虫是近半个月前学习爬虫技术的一个小例子,比较简单,怕时间久了会忘,这里简单总结一下.主要用到的外部Jar包有HttpClient4.3.4,HtmlParser2.1,使用的开发 ...

  10. SegmentControl的多选项实现(标题栏)

    NSArray *titleArr = @[STR(@"全部"), STR(@"未使用"), STR(@"已赠送"), STR(@" ...