在javaweb开发过程中,有时候我们需要发送邮件,比如说在用户注册后,我们需要用户激活后才能登陆,这时候,就需要给用户发送激活码。
这个发送邮件的小工具,不仅可以发送普通文本邮件,还可以发送带附件的邮件。
MailUtil需要两个jar包:
1:mail.jar
2:activation.jar
代码示例如下:
Mail实体类:
package cn.ccnu.mail;
import java.util.ArrayList;
import java.util.List;
/*
* 邮件对象的实体类
*/
public class Mail {
private String from;//发送邮件的人
private StringBuilder to = new StringBuilder();//收邮件的人
private StringBuilder cc = new StringBuilder();//抄送给谁
private StringBuilder bcc = new StringBuilder();//暗送给谁
private String subject;//邮件的主题
private String context;//邮件的正文
//邮件的附件
private List<AttachBean> attachBeanList = 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 context) {
this.from = from;
this.to.append(to);
this.subject = subject;
this.context = context;
}
//得到发件人
public String getFrom() {
return from;
}
//设置收件人
public void setFrom(String from) {
this.from = from;
}
//得到收件人
public String getTo() {
return to.toString();
}
//添加收件人
public void addTo(String to) {
//如果已经有了抄送的人,先添加逗号,再添加收件人
if(this.to.length() > 0){
this.to.append(",");
}
//如果没有抄送的人,则直接添加
this.to.append(to);
}
//得到抄送人
public String getCc() {
return cc.toString();
}
//添加抄送的人
public void addCc(String cc) {
if(this.cc.length() > 0){
this.cc.append(",");
}
this.cc.append(cc);
}
//得到暗送人
public String getBcc() {
return bcc.toString();
}
//添加暗送(密送)的人
public void addBcc(String bcc) {
if(this.bcc.length() > 0){
this.bcc.append(",");
}
this.bcc.append(bcc);
}
//得到邮件主题
public String getSubject() {
return subject;
}
//设置邮件主题
public void setSubject(String subject) {
this.subject = subject;
}
//得到邮件正文
public String getContext() {
return context;
}
//设置邮件正文
public void setContext(String context) {
this.context = context;
}
//得到含有附件的集合
public List<AttachBean> getAttachBeanList() {
return attachBeanList;
}
//添加附件
public void addAttach(AttachBean attachBean) {
this.attachBeanList.add(attachBean);
}
}
附件AttachBean实体类:
package cn.ccnu.mail;
import java.io.File;
/*
* 附件对象的实体类
*/
public class AttachBean {
private String cid;
private File file; //附件内容,为文件的地址
private String fileName;//附件的名称
//无参构造函数
public AttachBean() {
super();
}
//带附件和附件名的有参构造函数
public AttachBean(File file, String fileName) {
super();
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;
}
}
MailUtil类:
package cn.ccnu.mail;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/*
* 发送邮件的三个步骤:
* 1:获得Session
* 2:创建MimeMessage对象
* 3:发送邮件
* 发送邮件的工具类,含有两个方法:
* 1:得到Session的createSession方法
* 2:发送邮件的send方法
*/
public class MailUtil {
//获取Session
public static Session createSession(String host, final String username, final String password){
Properties props = new Properties();
//设置邮件服务器的主机
props.setProperty("mail.host", host);
//设置是否需要验证
props.setProperty("mail.smtp.auth", "true");
Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
};
//返回Session
return Session.getInstance(props, auth);
}
//发送指定的邮件
public static void send(Session session, final Mail mail) throws AddressException, MessagingException, IOException{
//创建MimeMessage对象
MimeMessage message = new MimeMessage(session);
//设置收件人
message.setFrom(new InternetAddress(mail.getFrom()));
//设置发件人
message.addRecipients(RecipientType.TO, mail.getTo());
//设置抄送人
String cc = mail.getCc();
if(cc != null){
message.addRecipients(RecipientType.CC, cc);
}
//设置暗送人
String bcc = mail.getBcc();
if(bcc != null){
message.addRecipients(RecipientType.BCC, bcc);
}
//设置主题
message.setSubject(mail.getSubject());
//创建部件集
MimeMultipart parts = new MimeMultipart();
//创建一个部件
MimeBodyPart part = new MimeBodyPart();
//设置邮件正文
part.setContent(mail.getContext(), "text/html;charset=UTF-8");
//把部件添加到部件集中
parts.addBodyPart(part);
/*
* 添加附件的部份
*/
List<AttachBean> attachBeanList = mail.getAttachBeanList();
//如果附件不为空
if(attachBeanList != null && attachBeanList.size() > 0){
//循环遍历附件集
for (AttachBean attach : attachBeanList) {
//创建一个部件
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);
}
}
//给邮件设置内容
message.setContent(parts);
//发送邮件
Transport.send(message);
}
}
测试:
package cn.ccnu.mail;
import java.io.File;
import java.io.IOException;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import org.junit.Test;
public class MailUtilTest {
@Test
public void test1() throws AddressException, MessagingException, IOException{
String host = "smtp.sina.com";
String username = "amanda7577@sina.com";
String password = "*youpassword";
Session session = MailUtil.createSession(host, username, password);
Mail mail = new Mail();
//设置发件人
mail.setFrom("amanda7577@sina.com");
//设置收件人
mail.addTo("695480667@qq.com");
mail.addTo("amanda7577@sina.com");
//设置抄送人
mail.addCc("695480667@qq.com");
mail.addCc("amanda7577@sina.com");
//设置密送人
mail.addBcc("695480667@qq.com");
mail.addBcc("amanda7577@sina.com");
mail.setSubject("this is a test mail");
mail.setContext("yes, this is a test mail!!!");
//添加附件
AttachBean attach = new AttachBean();
//设置附件内容,就是附件的地址
attach.setFile(new File("C:\\Users\\Jason\\Desktop\\attach\\按键.jpg"));
//设置附件文件名,注意在设置附件文件名的时候一定要带上文件的后缀名
//如果不设置文件的后缀名,将会出现文件下载时没有类型的情况
attach.setFileName("按键.jpg");
//把附件添加到邮件中
mail.addAttach(attach);
//添加附件
AttachBean attach1 = new AttachBean();
attach1.setFile(new File("C:/Users/Jason/Desktop/attach/Struts2实战.pdf"));
//设置附件名称,注意在设置附件文件名的时候一定要带上文件的后缀名
attach1.setFileName("struts2 实战.pdf");
mail.addAttach(attach1);
MailUtil.send(session, mail);
}
}