javaweb开发过程中小工具系列之JavaMail发邮件

        在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);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值