首先加入sun官方提供的mail.jar。
我这里写了三个类,一个是存储邮件信息的。第二个是验证器,第三个是发送器。
先看第一个类MailSenderInfo.java。这个类是发送邮件需要的基本信息。比如对方邮件地址、用户名、密码什么的。
package com.wf.mail;
import java.util.Properties;
/**
* 发送邮件的基本信息
* @author wangfeng
* @version 1.0
* @since 2013-4-23 15:17:56
*
*/
public class MailSenderInfo {
//发送邮件的服务器主机
private String mailServerHost;
//发送邮件的服务器端口
private String mailServerPort;
//邮件发送者的地址
private String fromAddress;
//邮件接收者的地址
private String toAddress;
//登陆邮件发送服务器的用户名和密码
private String userName;
private String password;
//是否需要身份验证
private boolean validate;
//邮件主题
private String subject;
//邮件的文本内容
private String content;
//邮件的附件文件名
private String attachFileNames;
/**
* 获得邮件会话的属性
* @return
*/
public Properties getProperties(){
Properties properties = new Properties();
properties.put("mail.smtp.host", this.mailServerHost);
properties.put("mail.smtp.port", this.mailServerPort);
properties.put("mail.smtp.auth", validate ? "true" : "false");
return properties;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
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 String getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(String attachFileNames) {
this.attachFileNames = attachFileNames;
}
}
再来看第二个类,验证器,这个验证器是用来到你的邮件服务器验证你的用户和密码是否能通过的:
package com.wf.mail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 验证器
* @author wangfeng
* @version 1.0
* @since 2013-4-23 15:57:06
*/
public class MyAuthenticator extends Authenticator{
private String userName;
private String password;
public MyAuthenticator(){
}
public MyAuthenticator(String userName, String password){
this.userName = userName;
this.password = password;
}
/**
* 对用户和密码进行验证
*/
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(this.userName, this.password);
}
}
这个类主要是利用了Sun官方提供的PasswordAuthentication验证器类。第三个类:一个简单的(不包含附件的)邮件发送器
package com.wf.mail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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;
/**
* 不带附件的简单邮件发送器
* @author wangfeng
* @version 1.0
* @since 2013-4-23 15:59:53
*/
public class SimpleMailSender {
private MyAuthenticator authenticator ;
/**
* 以文本格式发送邮件
* @param MailSenderInfo 待发送的邮件信息
* @return boolean 邮件是否发送成功
*/
public boolean sendTextMail(MailSenderInfo mailInfo){
Properties properties = mailInfo.getProperties();
//如果需要身份验证,则创建一个密码验证器
if(mailInfo.isValidate()){
authenticator = new MyAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());
}
//根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(properties, authenticator);
try{
//根据session创建一个没有附件的邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
//创建邮件发送者发送者地址
Address fromAddress = new InternetAddress(mailInfo.getFromAddress());
//设置邮件消息的发送者
mailMessage.setFrom(fromAddress);
//创建邮件的接收者地址,然后设置到邮件消息中
Address toAddress = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, toAddress);
//设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
//设置邮件的发送时间
mailMessage.setSentDate(new Date());
//设置邮件消息的主要内容
mailMessage.setText(mailInfo.getContent());
//发送邮件
Transport.send(mailMessage);
return true;
}catch (MessagingException e) {
e.printStackTrace();
}
return false;
}
/**
* 发送HTML格式的EMAIL
* @param MailSenderInfo待发送的邮件信息
* @return boolean 返回邮件是否发送成功
*/
public boolean sendHtmlMail(MailSenderInfo mailInfo){
Properties properties = mailInfo.getProperties();
//如果需要身份验证,则创建一个密码验证器
if(mailInfo.isValidate()){
authenticator = new MyAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());
}
//根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(properties, authenticator);
try{
//根据session创建一个没有附件的邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
//创建邮件发送者发送者地址
Address fromAddress = new InternetAddress(mailInfo.getFromAddress());
//设置邮件消息的发送者
mailMessage.setFrom(fromAddress);
//创建邮件的接收者地址,然后设置到邮件消息中
Address toAddress = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, toAddress);
//设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
//设置邮件的发送时间
mailMessage.setSentDate(new Date());
// 创建一个MiniMultipart类型的容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容 格式
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
//发送邮件
Transport.send(mailMessage);
return true;
}catch (MessagingException e) {
e.printStackTrace();
}
return false;
}
}
来测试一下:
package com.wf.test;
import org.junit.Test;
import com.wf.mail.MailSenderInfo;
import com.wf.mail.SimpleMailSender;
public class MailTest {
@Test
public void test(){
MailSenderInfo mailSenderInfo = new MailSenderInfo();
mailSenderInfo.setMailServerHost("smtp.ym.163.com");//网易免费企业邮箱
mailSenderInfo.setMailServerPort("25");
mailSenderInfo.setValidate(true);
mailSenderInfo.setUserName("my@163.com");//你的用户名
mailSenderInfo.setPassword("mypassword");//你的密码
mailSenderInfo.setFromAddress("my@163.com");
mailSenderInfo.setToAddress("your@163.com");//收邮件的地址
mailSenderInfo.setSubject("邮件标题测试");
mailSenderInfo.setContent("邮件内容");
//创建一个邮件发送器
SimpleMailSender simpleMailSender = new SimpleMailSender();
simpleMailSender.sendTextMail(mailSenderInfo);//发送文本格式邮件
simpleMailSender.sendHtmlMail(mailSenderInfo);//发送HTML格式邮件
}
}
测试通过。