java 发送邮件(可发送多人,抄送多人,可带附件)

邮件发送器


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值