1.邮件内容实体
package com.hthl.xxtd.sdk.email;
import java.io.File;
import java.util.List;
/**
* 发送邮件需要使用的基本信息
*/
import java.util.Properties;
public class MailInfo {
// 发送邮件的服务器的IP和端口
private String mailServerHost;
private String mailServerPort = "25";
// 邮件发送者的地址
private String fromAddress;
// 邮件接收者的地址
private String toAddress;
// 登陆邮件发送服务器的用户名和密码
private String userName;
private String password;
// 是否需要身份验证
private boolean validate = false;
// 邮件主题
private String subject;
// 邮件的文本内容格式(HTML格式:text/html,纯文本格式:text/plain)
private String contentType;
// 邮件的文本内容
private String content;
// 邮件的附件
private List attachments;
/**
* 获得邮件会话属性
*/
public Properties getProperties(){
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
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 getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public List getAttachments() {
return attachments;
}
public void setAttachments(List attachments) {
this.attachments = attachments;
}
}2.邮箱授权实体
package com.hthl.xxtd.sdk.email;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 邮箱授权类
*/
public class MyAuthenticator extends Authenticator{
String userName=null;
String password=null;
public MyAuthenticator(){
}
public MyAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(userName, password);
}
}3.邮件发送器
package com.hthl.xxtd.sdk.email;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
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;
import javax.mail.internet.MimeUtility;
import org.apache.log4j.Logger;
/**
* 邮件(可带多个附件)发送器
*/
public class MailSender {
private static final Logger logger = Logger.getLogger(MailSender.class);
/**
* 发送邮件
* @param mailInfo 待发送的邮件信息
*/
public static boolean sendMail(MailInfo mailInfo) {
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// 如果需要身份认证,则创建一个密码验证器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
//Session sendMailSession = Session.getDefaultInstance(pro, authenticator);//废弃旧Session
Session sendMailSession = Session.getInstance(pro, authenticator);//为保证邮箱通道配置变更后立马生效,需每次创建新的Session
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart multipart = new MimeMultipart();
// 创建一个MimeBodyPart
BodyPart bodyPart = new MimeBodyPart();
// 设置内容及格式
bodyPart.setContent(mailInfo.getContent(), mailInfo.getContentType()+"; charset=utf-8");
multipart.addBodyPart(bodyPart);
// 添加附件的内容
List attachments=mailInfo.getAttachments();
if(attachments!=null){
for (int i = 0; i < attachments.size(); i++) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachments.get(i));
attachmentBodyPart.setDataHandler(new DataHandler(source));
// MimeUtility.encodeWord可以避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachments.get(i).getName()));
multipart.addBodyPart(attachmentBodyPart);
}
}
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(multipart);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (Exception e) {
logger.error("发送邮件异常:", e);
}
return false;
}
}
4.测试类
package com.hthl.xxtd.sdk.email;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
MailInfo mailInfo = new MailInfo();
mailInfo.setMailServerHost("smtp.126.com"); // 邮箱服务器
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
// 以下是发送方信息
mailInfo.setUserName("myemail");
mailInfo.setPassword("123456");// 您的邮箱密码
mailInfo.setFromAddress("myemail@126.com");
// 以下是接收方信息
mailInfo.setToAddress("9869803@qq.com");
mailInfo.setSubject("XXX先生您好,您的9月份账单来了!");
mailInfo.setContent("邮件内容");
File affix1 = new File("d:\\9 mouth bill.txt");
File affix2 = new File("d:\\9月份账单.txt");
List attachments=new ArrayList();
attachments.add(affix1);
attachments.add(affix2);
mailInfo.setAttachments(attachments);
mailInfo.setContentType("text/html");//HTML格式:text/html,纯文本格式:text/plain
// 这个类主要来发送邮件
MailSender.sendMail(mailInfo);//发送邮件
}
}