邮件发送器
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
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.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送器
* @author zk
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送配置信息加载类
* @author zk
* @date 2017年1月3日 上午10:52:12
* @version V1.0
*/
public class ConfigLoader {
private static final Logger logger = LoggerFactory.getLogger(ConfigLoader.class);
// 配置文件路径
private static String mailPath = "mail.properties";
// 邮件发送SMTP主机
private static String server;
// 发件人邮箱地址
private static String sender;
// 发件人邮箱用户名
private static String username;
// 发件人邮箱密码
private static String password;
// 发件人显示昵称
private static String nickname;
private static String cc;
static {
// 类初始化后加载配置文件
InputStream in = ConfigLoader.class.getClassLoader()
.getResourceAsStream(mailPath);
Properties props = new Properties();
try {
props.load(in);
} catch (IOException e) {
logger.error("load mail setting error,pleace check the file path:"
+ mailPath);
logger.error(e.toString(), e);
}
props.put("mail.smtp.starttls.enable", true);
server = props.getProperty("mail.server");
sender = props.getProperty("mail.sender");
username = props.getProperty("mail.username");
password = props.getProperty("mail.password");
nickname = props.getProperty("mail.nickname");
cc = props.getProperty("mail.cc");
props.put("mail.smtp.ssl.trust", server);
logger.debug("load mail setting success,file path:" + mailPath);
}
public static String getMailPath() {
return mailPath;
}
public static String getServer() {
return server;
}
public static String getSender() {
return sender;
}
public static String getUsername() {
return username;
}
public static String getPassword() {
return password;
}
public static String getNickname() {
return nickname;
}
public static void setMailPath(String mailPath) {
ConfigLoader.mailPath = mailPath;
}
public static String getCc() {
return cc;
}
public static void setCc(String cc) {
ConfigLoader.cc = cc;
}
}
package ibp.ioc.service.aml.job.mailsend.bo;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送配置信息加载类
* @author zk
* @date 2017年1月3日 上午10:52:12
* @version V1.0
*/
public class ConfigLoader {
private static final Logger logger = LoggerFactory.getLogger(ConfigLoader.class);
// 配置文件路径
private static String mailPath = "mail.properties";
// 邮件发送SMTP主机
private static String server;
// 发件人邮箱地址
private static String sender;
// 发件人邮箱用户名
private static String username;
// 发件人邮箱密码
private static String password;
// 发件人显示昵称
private static String nickname;
private static String cc;
static {
// 类初始化后加载配置文件
InputStream in = ConfigLoader.class.getClassLoader()
.getResourceAsStream(mailPath);
Properties props = new Properties();
try {
props.load(in);
} catch (IOException e) {
logger.error("load mail setting error,pleace check the file path:"
+ mailPath);
logger.error(e.toString(), e);
}
props.put("mail.smtp.starttls.enable", true);
server = props.getProperty("mail.server");
sender = props.getProperty("mail.sender");
username = props.getProperty("mail.username");
password = props.getProperty("mail.password");
nickname = props.getProperty("mail.nickname");
cc = props.getProperty("mail.cc");
props.put("mail.smtp.ssl.trust", server);
logger.debug("load mail setting success,file path:" + mailPath);
}
public static String getMailPath() {
return mailPath;
}
public static String getServer() {
return server;
}
public static String getSender() {
return sender;
}
public static String getUsername() {
return username;
}
public static String getPassword() {
return password;
}
public static String getNickname() {
return nickname;
}
public static void setMailPath(String mailPath) {
ConfigLoader.mailPath = mailPath;
}
public static String getCc() {
return cc;
}
public static void setCc(String cc) {
ConfigLoader.cc = cc;
}
}
* @date 2017年1月3日 下午1:44:46
* @version V1.0
*/
public class MailSender {
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象
private Properties props; // 系统属性
private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成
private String username;// 发件人的用户名
private String password;// 发件人的密码
private String nickname;// 发件人的昵称
private static Logger logger = LoggerFactory.getLogger(MailSender.class);
/**
* 有参构造器
*
* @param smtp
* @throws GeneralSecurityException
*/
public MailSender() {
setSmtpHost(ConfigLoader.getServer());
createMimeMessage();
}
/**
* 设置邮件发送的SMTP主机
*
* @param hostName
* @throws GeneralSecurityException
*/
public void setSmtpHost(String hostName) {
if (props == null)
props = System.getProperties();
props.put("mail.smtp.host", hostName);
props.put("mail.smtp.port", "25");
props.put("mail.smtp.starttls.enable", "true");
logger.debug("set system properties success :mail.smtp.host= "
+ hostName);
}
/**
* 创建邮件对象
*/
public void createMimeMessage() {
// 获得邮件会话对象
session = Session.getDefaultInstance(props, null);
// 创建MIME邮件对象
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart("mixed");
logger.debug(" create session and mimeMessage success");
}
/**
* 设置权限鉴定配置
*
* @param need
* 是否需要权限 true:需要 ,false:不需要
*/
public void setNeedAuth(boolean need) {
if (props == null)
props = System.getProperties();
if (need) {
props.put("mail.smtp.auth", "true");
} else {
props.put("mail.smtp.auth", "false");
}
logger.debug("set smtp auth success:mail.smtp.auth= " + need);
}
/**
* 设置发送邮件的主题
*
* @param subject
* @throws UnsupportedEncodingException
* @throws MessagingException
*/
public void setSubject(String subject) throws UnsupportedEncodingException,
MessagingException {
mimeMsg.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));
logger.debug("set mail subject success, subject= " + subject);
}
/**
* 设置邮件的正文内容
*
* @param mailBody
* @throws MessagingException
*/
public void setBody(String mailBody) throws MessagingException {
MimeBodyPart content = new MimeBodyPart();
content.setContent("" + mailBody, "text/html;charset=utf-8");
mp.addBodyPart(content);
// mimeMsg.setContent(mp);
}
/*
* public void setBody(String mailBody) throws MessagingException {
*
* mimeMsg.setContent("" + mailBody, "text/html;charset=utf-8");
* logger.debug("set mail body content success,mailBody= " + mailBody);
*
* }
*/
/**
* 添加邮件附件
*
* @param filePath
* 附件的绝对路径
* @throws MessagingException
* @throws UnsupportedEncodingException
*/
public void addFileAffix(String filePath, String fileName)
throws MessagingException, UnsupportedEncodingException {
MimeBodyPart bp = new MimeBodyPart();
DataSource ds1 = new FileDataSource(new File(filePath));
DataHandler dh1 = new DataHandler(ds1);
bp.setDataHandler(dh1);
// bp.setFileName(new String(fileName.getBytes("UTF-8"), "UTF-8"));
bp.setFileName(MimeUtility.encodeWord(fileName));
mp.addBodyPart(bp);
// 整封邮件的MINE消息体
logger.debug("mail add file success,filename= " + filePath);
}
/*
* public void addFileAffix(String filePath) throws MessagingException,
* UnsupportedEncodingException { BodyPart bp = new MimeBodyPart();
* FileDataSource fileds = new FileDataSource(filePath);
* bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(new
* String(fileds.getName().getBytes("UTF-8"), "ISO8859-1"));
* mp.addBodyPart(bp); logger.debug("mail add file success,filename= " +
* filePath); }
*/
public void setCc(String cc) throws AddressException, MessagingException {
mimeMsg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(cc));
}
/**
* 设置发件人邮箱地址
*
* @param sender
* @throws UnsupportedEncodingException
* @throws AddressException
* @throws MessagingException
*/
public void setSender(String sender) throws UnsupportedEncodingException,
AddressException, MessagingException {
nickname = MimeUtility.encodeText(nickname, "utf-8", "B");
mimeMsg.setFrom(new InternetAddress(nickname + " <" + sender + ">"));
logger.debug(" set mail sender and nickname success , sender= "
+ sender + ",nickname=" + nickname);
}
/**
* 设置收件人邮箱地址
*
* @param receiver
* @throws AddressException
* @throws MessagingException
*/
public void setReceiver(String receiver) throws AddressException,
MessagingException {
mimeMsg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(receiver));
logger.debug("set mail receiver success,receiver = " + receiver);
}
/**
* 设置多个收件人
*
* @param toAddress
* @throws MessagingException
*/
public void setReceivers(List<String> toAddress) throws MessagingException {
Address[] address = new InternetAddress[toAddress.size()];
for (int i = 0; i < toAddress.size(); i++) {
address[i] = new InternetAddress(toAddress.get(i));
}
mimeMsg.setRecipients(Message.RecipientType.TO, address);
}
/**
* 设置抄送人的邮箱地址
*
* @param copyto
* @throws AddressException
* @throws MessagingException
*/
public void setCopyTo(String copyto) throws AddressException,
MessagingException {
mimeMsg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(copyto));
logger.debug("set mail copyto receiver success,copyto = " + copyto);
}
/**
* 设置多个抄送人的邮箱
*
* @param toCopys
* @throws AddressException
* @throws MessagingException
*/
public void setCopyTos(List<String> toCopys) throws AddressException,
MessagingException {
Address[] address = new InternetAddress[toCopys.size()];
for (int i = 0; i < toCopys.size(); i++) {
address[i] = new InternetAddress(toCopys.get(i));
}
mimeMsg.setRecipients(Message.RecipientType.CC, address);
}
/**
* 设置发件人用户名密码,并进行发送邮件操作
*
* @throws MessagingException
*/
public void sendout() throws MessagingException {
Transport transport = null;
try {
this.setNeedAuth(true);
this.setNamePass(ConfigLoader.getUsername(), ConfigLoader.getPassword(), ConfigLoader.getNickname());
this.setSender(ConfigLoader.getSender());
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
Session mailSession = Session.getInstance(props, null);
transport = mailSession.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"), username,password);
//收件人发送
if(null != mimeMsg.getRecipients(Message.RecipientType.TO) && mimeMsg.getRecipients(Message.RecipientType.TO).length > 0 ){
transport.sendMessage(mimeMsg,
mimeMsg.getRecipients(Message.RecipientType.TO));
}
//抄送人 发送
if(null != mimeMsg.getRecipients(Message.RecipientType.CC) && mimeMsg.getRecipients(Message.RecipientType.CC).length > 0 ){
transport.sendMessage(mimeMsg,
mimeMsg.getRecipients(Message.RecipientType.CC));
}
logger.debug(" send mail success");
}catch(Exception e){
logger.error("发送邮件发生错误", e);
}finally{
if(transport != null){
transport.close();
}
}
}
/**
* 注入发件人用户名 ,密码 ,昵称
*
* @param username
* 发件人邮箱用户名
* @param password
* 密码
* @param nickname
* 昵称
*/
public void setNamePass(String username, String password, String nickname) {
this.username = username;
this.password = password;
this.nickname = nickname;
}
/**
*
* @param body 內容 :文字 或 html
* @param subject 主题
* @param recievers List 收件人
* @param filePath 附件地址
* @param fileName 附件名称
* @throws UnsupportedEncodingException
* @throws MessagingException
* 有附件的
*/
public void sendProjrctEmail(String body, String subject,
List<String> recievers,List<String> cc, String filePath, String fileName)
throws UnsupportedEncodingException, MessagingException {
this.setBody(body);
if (!"".equals(filePath)) {
this.addFileAffix(filePath, fileName);
}
this.setCopyTos(cc);
this.setSubject(subject);
this.setReceivers(recievers);
this.sendout();
}
/**
*
* @param body
* @param subject
* @param recievers
* @param copys
* @throws UnsupportedEncodingException
* @throws MessagingException
* 无附件的
*/
public void sendProjrctEmail(String body, String subject,List<String> recievers,List<String> copys)
throws UnsupportedEncodingException, MessagingException {
this.setBody(body);
this.setSubject(subject);
//收件人
this.setReceivers(recievers);
//抄送
this.setCopyTos(copys);
this.sendout();
}
}
邮件发送配置信息加载类
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Description: 邮件发送配置信息加载类
* @author zk
* @date 2017年1月3日 上午10:52:12
* @version V1.0
*/
public class ConfigLoader {
private static final Logger logger = LoggerFactory.getLogger(ConfigLoader.class);
// 配置文件路径
private static String mailPath = "mail.properties";
// 邮件发送SMTP主机
private static String server;
// 发件人邮箱地址
private static String sender;
// 发件人邮箱用户名
private static String username;
// 发件人邮箱密码
private static String password;
// 发件人显示昵称
private static String nickname;
private static String cc;
static {
// 类初始化后加载配置文件
InputStream in = ConfigLoader.class.getClassLoader()
.getResourceAsStream(mailPath);
Properties props = new Properties();
try {
props.load(in);
} catch (IOException e) {
logger.error("load mail setting error,pleace check the file path:"
+ mailPath);
logger.error(e.toString(), e);
}
props.put("mail.smtp.starttls.enable", true);
server = props.getProperty("mail.server");
sender = props.getProperty("mail.sender");
username = props.getProperty("mail.username");
password = props.getProperty("mail.password");
nickname = props.getProperty("mail.nickname");
cc = props.getProperty("mail.cc");
props.put("mail.smtp.ssl.trust", server);
logger.debug("load mail setting success,file path:" + mailPath);
}
public static String getMailPath() {
return mailPath;
}
public static String getServer() {
return server;
}
public static String getSender() {
return sender;
}
public static String getUsername() {
return username;
}
public static String getPassword() {
return password;
}
public static String getNickname() {
return nickname;
}
public static void setMailPath(String mailPath) {
ConfigLoader.mailPath = mailPath;
}
public static String getCc() {
return cc;
}
public static void setCc(String cc) {
ConfigLoader.cc = cc;
}
}
配置文件
mail.server=********
mail.sender=********
mail.nickname=********
mail.username=********@qq.com
mail.password=********
mail.cc=********@qq.com,********@qq.com