邮件发送器


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;

/**
 * @De ion: 邮件发送器
 * @author 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;

/**
* @De ion: 邮件发送配置信息加载类
* @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;

/**
* @De ion: 邮件发送配置信息加载类
* @author caoguangyuan
* @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;

/**
* @De ion: 邮件发送配置信息加载类
* @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

 

收藏 打印