javaxmail发邮件工具类JavaEmailUtils

package com.chen.test;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
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.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;



//邮箱工具类
public class JavaEmailUtils {

	// 发信人的Email地址
	private static String fromEmailAccount;
	// 发信人的称呼
	private static String fromEmailShow;
	// 发信人的Email邮箱密码
	private static String fromEmailPassword;
	// 收信人的Email地址
	private static String toEmailAccount;
	// 收信人的称呼
	private static String toEmailShow;
	// 发信人邮箱的SMTP服务器地址
	private static String formEmailSMTPHOST;
	// 发信人邮箱的POP3服务器地址
	private static String formEmailPOP3HOST;
	// 发信人邮箱的IMAP服务器地址
	private static String formEmailIMAPHOST;
	// 连接邮件服务器的参数配置
	private static Properties properties;
	// 是否是SMTP协议
	private static Boolean isSMTP;
	// 是否是SSL连接
	private static Boolean isSSL;
	// 邮件主题
	private static String emailSubject;
	// 邮件内容
	private static String emailContent;
	//用于添加到邮件中的图片
	private static Map<String,File> imageFilesMap;
	//用于添加到邮件中的附件
	private static List<File> attachContentsList;
	// 邮件发送日期
	private static Date emailSendDate;
	// 邮件编码
	private final static String EMAIL_CHARSET = "UTF-8";
	// 邮件内容编码
	private final static String CONTENT_CHARSET = "text/html;charset=UTF-8";

	// 初始化
	private static void initEmail() {
		
		// 默认配置一些邮件信息
		// 默认配置发信人的Email地址
		if (JavaEmailUtils.fromEmailAccount == null) {
			// 发信人的Email地址(这是我注册的一个测试用的邮箱)
			JavaEmailUtils.fromEmailAccount = "public_test_email@126.com";
			// 发信人的Email邮箱密码
			JavaEmailUtils.fromEmailPassword = "test123";
			// 发件人的服务器地址
			JavaEmailUtils.formEmailSMTPHOST = "smtp.126.com";
		}
		// 默认配置发信人称呼
		if (JavaEmailUtils.fromEmailShow == null) {
			// 发信人称呼位邮箱前缀
			JavaEmailUtils.fromEmailShow = JavaEmailUtils.fromEmailAccount.substring(0,
					JavaEmailUtils.fromEmailAccount.indexOf("@"));
		}
		// 默认配置收信人的称呼
		if (JavaEmailUtils.toEmailShow == null) {
			if(JavaEmailUtils.toEmailAccount!=null){
			// 收信人的称呼为收件人邮箱前缀
			JavaEmailUtils.toEmailShow = JavaEmailUtils.toEmailAccount.substring(0,
					JavaEmailUtils.toEmailAccount.indexOf("@"));
			}
		}
		// 默认使用SMTP协议
		if (JavaEmailUtils.isSMTP == null) {
			JavaEmailUtils.isSMTP = true;
		}
		// 默认不使用SSL安全认证协议
		if (JavaEmailUtils.isSSL == null) {
			JavaEmailUtils.isSSL = false;
		}
		// 默认邮件内容为 Hello World
		if (JavaEmailUtils.emailContent == null) {
			JavaEmailUtils.emailContent = "<h1>Hello,World!</h1>";
		}
		// 默认邮件主题为内容前两个字
		if (JavaEmailUtils.emailSubject == null) {
			// 选择21是因为默认邮件内容长度是21
			if (JavaEmailUtils.emailContent.length() >= 21) {
				JavaEmailUtils.emailSubject = JavaEmailUtils.emailContent.substring(0, 21);
			} else {
				JavaEmailUtils.emailSubject = JavaEmailUtils.emailContent;
			}
		}
		// 默认邮件发送日期为当前时间
		if (JavaEmailUtils.emailSendDate == null) {
			JavaEmailUtils.emailSendDate = new Date();
		}

		// 实例化Properties
		properties = new Properties();

		// 如果是SMTP协议
		if (isSMTP) {
			properties = setSMTPProps(properties);
		}

		// 如果为 SSL 安全认证(连接失败, 要求 SSL 安全连接时使用)
		if (isSSL) {
			properties = setSSLProps(properties);
		}
	}

	// SMTP协议
	private static Properties setSMTPProps(Properties properties) {
		// 指定默认消息传输协议。该
		// Session方法getTransport()返回实现此协议的Transport对象。默认情况下,返回配置文件中的第一个传输提供程序。
		String transportProtocolKEY = "mail.transport.protocol";
		// 指定协议的邮件服务器的主机名。覆盖mail.host属性。
		String smtpHostKEY = "mail.smtp.host";
		// 指定协议的邮件服务器的端口号。如果未指定,则使用协议的默认端口号。(一般不用设置)
		String smtpPortKEY = "mail.smtp.port";
		// 使用指定的协议连接到邮件服务器时要使用的用户名。覆盖mail.user属性。(一般不用设置)
		String smtpUserKEY = "mail.smtp.user";
		// 如果为true,则尝试使用AUTH命令认证用户。默认为false。
		String smtpAuthKEY = "mail.smtp.auth";

		// 设置协议为smtp
		String transportProtocolVALUE = "smtp";
		properties.setProperty(transportProtocolKEY, transportProtocolVALUE);
		// 发件人的邮箱的 SMTP 服务器地址
		properties.setProperty(smtpHostKEY, formEmailSMTPHOST);
		// 需要请求认证
		properties.setProperty(smtpAuthKEY, "true");
		return properties;
	}

	// SSL 安全认证
	private static Properties setSSLProps(Properties properties) {
		// 如果为 SSL 安全认证(连接失败, 要求 SSL 安全连接时使用)
		// 如果set,则指定实现该javax.net.SocketFactory接口的类的名称 。此类将用于创建SMTP套接字。
		String socketFactoryClassKEY = "mail.smtp.socketFactory.class";
		// 如果设置为true,则无法使用指定的套接字工厂类创建套接字将导致使用java.net.Socket该类创建套接字。默认为true。
		String socketFactoryFallbackKEY = "mail.smtp.socketFactory.fallback";
		// 指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。
		String socketFactoryPortKEY = "mail.smtp.socketFactory.port";

		// SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,需要改为对应邮箱的 SMTP
		// 服务器的端口
		// QQ邮箱的SMTP(SLL)端口为465或587
		String sslSmtpPortVALUE = "465";
		// 设置端口号
		properties.setProperty(socketFactoryPortKEY, sslSmtpPortVALUE);
		// 指定javax.net.ssl.SSLSocketFactory 。此类将用于创建SMTP套接字。
		String socketFactoryClassVALUE = "javax.net.ssl.SSLSocketFactory";
		// 指定javax.net.ssl.SSLSocketFactory用于创建SMTP套接字。
		properties.setProperty(socketFactoryClassKEY, socketFactoryClassVALUE);
		// 设置使用指定的套接字工厂类创建套接字
		properties.setProperty(socketFactoryFallbackKEY, "false");
		return properties;
	}
	//发送邮件(收件人是多个)
	//toEmailAccountMap:收件人map
	//emailContent:邮件内容
	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(Map<String, String> toEmailAccountMap, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, null, null, null, null, null, null, emailContent, null,toEmailAccountMap,imageFilesMap,attachContentsList);
	}
	//发送邮件(收件人是多个)
	//toEmailAccountMap:收件人map
	//emailSubject:邮件主题
	//emailContent:邮件内容
	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(Map<String, String> toEmailAccountMap,String emailSubject, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, null, null, null, null, null, emailSubject, emailContent, null,toEmailAccountMap,imageFilesMap,attachContentsList);
	}
	//发送邮件(收件人是多个)
	//fromEmailAccount:发送人邮箱
	//fromEmailPassword:发送人邮箱密码
	//toEmailAccountMap:收件人map
	//formEmailSMTPHOST:发送人邮箱SMTP服务器地址
	//emailSubject:邮件主题
	//emailContent:邮件内容
	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, Map<String, String> toEmailAccountMap,
			String formEmailSMTPHOST, String emailSubject, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, null, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, null,toEmailAccountMap,imageFilesMap,attachContentsList);
	}

	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, Map<String, String> toEmailAccountMap,
			String formEmailSMTPHOST, String emailSubject, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList, Date emailSendDate)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, null, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, emailSendDate,toEmailAccountMap,imageFilesMap,attachContentsList);
	}

	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String fromEmailAccount, String fromEmailShow, String fromEmailPassword,
			Map<String, String> toEmailAccountMap, String formEmailSMTPHOST, String emailSubject,
			String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList, Date emailSendDate) throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, fromEmailShow, fromEmailPassword, null, null, formEmailSMTPHOST,
				null, null, emailSubject, emailContent, emailSendDate,toEmailAccountMap,imageFilesMap,attachContentsList);
	}
	//发送邮件(收件人是一个)
	//toEmailAccount:收件人邮箱
	//emailContent:邮件内容
	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String toEmailAccount, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, toEmailAccount, null, null, null, null, null, emailContent, null,null,imageFilesMap,attachContentsList);
	}
	//发送邮件(收件人是一个)
	//toEmailAccount:收件人邮箱
	//emailSubject:邮件主题
	//emailContent:邮件内容
	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String toEmailAccount, String emailSubject, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, toEmailAccount, null, null, null, null, emailSubject, emailContent, null,null,imageFilesMap,attachContentsList);
	}
	//发送邮件(收件人是多个)
		//fromEmailAccount:发送人邮箱
		//fromEmailPassword:发送人邮箱密码
		//toEmailAccount:收件人邮箱
		//formEmailSMTPHOST:发送人邮箱SMTP服务器地址
		//emailSubject:邮件主题
		//emailContent:邮件内容
	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, String toEmailAccount,
			String formEmailSMTPHOST, String emailSubject, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, toEmailAccount, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, null,null,imageFilesMap,attachContentsList);
	}

	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, String toEmailAccount,
			String formEmailSMTPHOST, String emailSubject, String emailContent,Map<String,File> imageFilesMap,List<File> attachContentsList, Date emailSendDate)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, toEmailAccount, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, emailSendDate,null,imageFilesMap,attachContentsList);
	}

	//imageFilesMap:邮件图片集
	//attachContentsList:邮件附件集
	public static void sendEmil(String fromEmailAccount, String fromEmailShow, String fromEmailPassword,
			String toEmailAccount, String toEmailShow, String formEmailSMTPHOST, String emailSubject,
			String emailContent, Map<String,File> imageFilesMap,List<File> attachContentsList,Date emailSendDate) throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, fromEmailShow, fromEmailPassword, toEmailAccount, toEmailShow, formEmailSMTPHOST,
				null, null, emailSubject, emailContent, emailSendDate,null,imageFilesMap,attachContentsList);
	}

	//发送邮件(收件人是多个)
	//toEmailAccountMap:收件人map
	//emailContent:邮件内容
	public static void sendEmil(Map<String, String> toEmailAccountMap, String emailContent)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, null, null, null, null, null, null, emailContent, null,toEmailAccountMap,null,null);
	}
	//发送邮件(收件人是多个)
	//toEmailAccountMap:收件人map
	//emailSubject:邮件主题
	//emailContent:邮件内容
	public static void sendEmil(Map<String, String> toEmailAccountMap,String emailSubject, String emailContent)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, null, null, null, null, null, emailSubject, emailContent, null,toEmailAccountMap,null,null);
	}
	//发送邮件(收件人是多个)
	//fromEmailAccount:发送人邮箱
	//fromEmailPassword:发送人邮箱密码
	//toEmailAccountMap:收件人map
	//formEmailSMTPHOST:发送人邮箱SMTP服务器地址
	//emailSubject:邮件主题
	//emailContent:邮件内容
	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, Map<String, String> toEmailAccountMap,
			String formEmailSMTPHOST, String emailSubject, String emailContent)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, null, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, null,toEmailAccountMap,null,null);
	}

	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, Map<String, String> toEmailAccountMap,
			String formEmailSMTPHOST, String emailSubject, String emailContent, Date emailSendDate)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, null, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, emailSendDate,toEmailAccountMap,null,null);
	}

	public static void sendEmil(String fromEmailAccount, String fromEmailShow, String fromEmailPassword,
			Map<String, String> toEmailAccountMap, String formEmailSMTPHOST, String emailSubject,
			String emailContent, Date emailSendDate) throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, fromEmailShow, fromEmailPassword, null, null, formEmailSMTPHOST,
				null, null, emailSubject, emailContent, emailSendDate,toEmailAccountMap,null,null);
	}
	//发送邮件(收件人是一个)
	//toEmailAccount:收件人邮箱
	//emailContent:邮件内容
	public static void sendEmil(String toEmailAccount, String emailContent)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, toEmailAccount, null, null, null, null, null, emailContent, null,null,null,null);
	}
	//发送邮件(收件人是一个)
	//toEmailAccount:收件人邮箱
	//emailSubject:邮件主题
	//emailContent:邮件内容
	public static void sendEmil(String toEmailAccount, String emailSubject, String emailContent)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(null, null, null, toEmailAccount, null, null, null, null, emailSubject, emailContent, null,null,null,null);
	}
	//发送邮件(收件人是多个)
		//fromEmailAccount:发送人邮箱
		//fromEmailPassword:发送人邮箱密码
		//toEmailAccount:收件人邮箱
		//formEmailSMTPHOST:发送人邮箱SMTP服务器地址
		//emailSubject:邮件主题
		//emailContent:邮件内容
	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, String toEmailAccount,
			String formEmailSMTPHOST, String emailSubject, String emailContent)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, toEmailAccount, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, null,null,null,null);
	}

	public static void sendEmil(String fromEmailAccount, String fromEmailPassword, String toEmailAccount,
			String formEmailSMTPHOST, String emailSubject, String emailContent, Date emailSendDate)
			throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, null, fromEmailPassword, toEmailAccount, null, formEmailSMTPHOST, null, null,
				emailSubject, emailContent, emailSendDate,null,null,null);
	}

	public static void sendEmil(String fromEmailAccount, String fromEmailShow, String fromEmailPassword,
			String toEmailAccount, String toEmailShow, String formEmailSMTPHOST, String emailSubject,
			String emailContent, Date emailSendDate) throws UnsupportedEncodingException, MessagingException {
		sendEmil(fromEmailAccount, fromEmailShow, fromEmailPassword, toEmailAccount, toEmailShow, formEmailSMTPHOST,
				null, null, emailSubject, emailContent, emailSendDate,null,null,null);
	}
	//发送邮件
	public static void sendEmil(String fromEmailAccount, String fromEmailShow, String fromEmailPassword,
			String toEmailAccount, String toEmailShow, String formEmailSMTPHOST, Boolean isSMTP, Boolean isSSL,
			String emailSubject, String emailContent, Date emailSendDate,Map<String, String> toEmailAccountMap,Map<String,File> imageFilesMap,List<File> attachContentsList) throws UnsupportedEncodingException, MessagingException
			{
		// 发信人的Email地址
		JavaEmailUtils.fromEmailAccount = fromEmailAccount;
		// 发信人称呼
		JavaEmailUtils.fromEmailShow = fromEmailShow;
		 发信人的Email邮箱密码
		JavaEmailUtils.fromEmailPassword = fromEmailPassword;
		// 收信人的Email地址
		JavaEmailUtils.toEmailAccount = toEmailAccount;
		// 收信人的称呼
		JavaEmailUtils.toEmailShow = toEmailShow;
		// 发件人的服务器地址
		JavaEmailUtils.formEmailSMTPHOST = formEmailSMTPHOST;
		// 是否使用SMTP协议
		JavaEmailUtils.isSMTP = isSMTP;
		// 是否使用SSL安全认证协议
		JavaEmailUtils.isSSL = isSSL;
		// 邮件主题
		JavaEmailUtils.emailSubject = emailSubject;
		// 邮件内容
		JavaEmailUtils.emailContent = emailContent;
		// 邮件图片集
		JavaEmailUtils.imageFilesMap = imageFilesMap;
		// 邮件附件集
		JavaEmailUtils.attachContentsList = attachContentsList;
		// 邮件发送日期
		JavaEmailUtils.emailSendDate = emailSendDate;
		// 1. 配置用于连接邮件服务器的参数
		initEmail();
		// 2. 根据配置创建会话对象, 用于和邮件服务器交互
		Session session = Session.getDefaultInstance(properties);
		// 设置为debug模式, 可以查看详细的发送 log
		session.setDebug(true);
		// 3. 创建一封邮件
		MimeMessage message = createMimeMessage(session,toEmailAccountMap);
			//还可以保存邮件到本地
			//OutputStream out = new FileOutputStream("MyEmail.eml");
			// message.writeTo(out);
			// out.flush();out.close();
		// 4. 根据 Session 获取邮件传输对象
		Transport transport = session.getTransport();
		// 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
		transport.connect(JavaEmailUtils.fromEmailAccount, JavaEmailUtils.fromEmailPassword);
		// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人,抄送人, 密送人
		transport.sendMessage(message, message.getAllRecipients());
		// 7. 关闭连接
		transport.close();

	}

	// 创建邮件信息
	private static MimeMessage createMimeMessage(Session session, Map toEmailAccountMap)
			throws UnsupportedEncodingException, MessagingException {
		// 1. 创建一封邮件
		MimeMessage message = new MimeMessage(session);
		// 2. From: 发件人
		message.setFrom(
				new InternetAddress(JavaEmailUtils.fromEmailAccount, JavaEmailUtils.fromEmailShow, EMAIL_CHARSET));
		// 3. To: 收件人(可以增加多个收件人)当toEmailAccountMap不为空时,是多个收件人
		//为了防止出现554 DT:SPM 126,在发送之前,给自己抄一份
		message.setRecipient(RecipientType.CC, new InternetAddress(JavaEmailUtils.fromEmailAccount, JavaEmailUtils.fromEmailShow, EMAIL_CHARSET));
		if (toEmailAccountMap != null) {
			if (toEmailAccountMap != null && toEmailAccountMap.size() > 0) {
				Set<String> emailShows = toEmailAccountMap.keySet();
				String[] emailShowsStr = new String[emailShows.size()];
				emailShows.toArray(emailShowsStr);
				for (int i = 0; i < emailShowsStr.length; i++) {
					if (i == 0) {
						//RecipientType.TO:普通发送
					    //RecipientType.CC:抄送
					    //RecipientType.BCC:密送
						message.setRecipient(RecipientType.TO, new InternetAddress(
								toEmailAccountMap.get(emailShowsStr[i]).toString(), emailShowsStr[i], EMAIL_CHARSET));
					} else {
						message.addRecipient(RecipientType.TO, new InternetAddress(
								toEmailAccountMap.get(emailShowsStr[i]).toString(), emailShowsStr[i], EMAIL_CHARSET));
					}
				}
			}
		}else{
			message.setRecipient(RecipientType.TO,
					new InternetAddress(JavaEmailUtils.toEmailAccount, JavaEmailUtils.toEmailShow, EMAIL_CHARSET));
		}
		// 4. Subject: 邮件主题
		message.setSubject(JavaEmailUtils.emailSubject, JavaEmailUtils.EMAIL_CHARSET);
		// 5. Content: 邮件正文(可以使用html标签)
		//简单内容
		//message.setContent(JavaEmailUtils.emailContent, JavaEmailUtils.CONTENT_CHARSET);
		//复杂内容(带有图片、文本、附件)
		message.setContent(crateMimeMultipartContent());
		// 6. 设置发件时间
		message.setSentDate(JavaEmailUtils.emailSendDate);
		// 7. 保存设置
		message.saveChanges();

		return message;
	}
	//创建复杂邮件内容正文
	private static MimeMultipart crateMimeMultipartContent(){
		MimeMultipart mimeMultipart=null;
		try{
		//创建文本“节点”
		MimeBodyPart  text=new MimeBodyPart();
		//这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
		text.setContent(JavaEmailUtils.emailContent,CONTENT_CHARSET);
		
		//将 文本 和 图片 “节点”合成一个混合“节点”
		MimeMultipart mm_text_image =new MimeMultipart();
		//放入文本
		mm_text_image.addBodyPart(text);
		//创建并放入图片
		if(imageFilesMap!=null&&imageFilesMap.size()>0){
			Set<String> contentIDs=imageFilesMap.keySet();
			String[] contentIDsArr=new String[contentIDs.size()];
			contentIDs.toArray(contentIDsArr);
			for(int i=0;i<contentIDsArr.length;i++){
				// 创建图片“节点”
				MimeBodyPart  image=new MimeBodyPart();
				// 读取本地文件
				DataHandler imageHander=new DataHandler(new FileDataSource((File)imageFilesMap.get(contentIDsArr[i])));
				// 将图片数据添加到“节点”
				image.setDataHandler(imageHander);
				// 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
				image.setContentID(contentIDsArr[i]);
				//放入图片(可以放入多张)
				mm_text_image.addBodyPart(image);
			}
		}	
		// 关联关系 setSubType:设置子类型。该方法只能在由客户端创建的新的MimeMultipart对象上调用。这种多部分对象的默认子类型为“mixed”。
		mm_text_image.setSubType("related");
		
		//将 文本+图片 的混合“节点”封装成一个普通“节点”
		MimeBodyPart text_image=new MimeBodyPart();
		text_image.setContent(mm_text_image);
		
		//合成一个大的混合“节点”
		mimeMultipart=new MimeMultipart();
		//放入 文本+图片 节点
		mimeMultipart.addBodyPart(text_image);
		//放入附件
		if(attachContentsList!=null&&attachContentsList.size()>0){
			for(File file:attachContentsList){
			 //创建附件“节点”
			MimeBodyPart attachContent=new MimeBodyPart();
			// 读取本地文件
			DataHandler attachContentHander=new DataHandler(new FileDataSource(file));
			// 将附件数据添加到“节点”
			attachContent.setDataHandler(attachContentHander);
			// 设置附件的文件名(需要编码)
			attachContent.setFileName(MimeUtility.encodeText(attachContentHander.getName()));
			//放入附件节点(如果有多个附件,可以创建多个多次添加)
			mimeMultipart.addBodyPart(attachContent);
			}
		}
		//混合关系
		mimeMultipart.setSubType("mixed");
		
		}catch (Exception e) {
			e.printStackTrace();
		}
		return mimeMultipart;
	}
	

	//main方法用于测试工具类
	public static void main(String[] args) throws Exception {
		// 测试只有一个收信人
		// 只有接收邮箱号和内容
		// sendEmil("chentiefeng521@163.com", "this is a test");
		// 只有接收邮箱号、主题和内容
		// sendEmil("chentiefeng521@163.com","hello World","this is a test");
		// 发送邮箱号,发送邮箱密码,接收邮箱号,发送邮箱SMTP服务器地址,主题,内容
		// sendEmil("public_test_email@126.com", "test123","chentiefeng521@163.com", "smtp.126.com","hello World2","this is a test3");

		// 测试拥有多个收信人
		Map<String, String> emails=new HashMap<String, String>();
		//map的key是收件人称呼,value是收件人邮箱地址
		emails.put("chentiefeng007", "chentiefeng007@126.com");
		emails.put("chentiefeng521", "chentiefeng521@163.com");
		// 只有接收邮箱号和内容
		//sendEmil(emails, "this is a test");
		// 只有接收邮箱号、主题和内容
		// sendEmil(emails,"hello World","this is a test");
		// 发送邮箱号,发送邮箱密码,接收邮箱号,发送邮箱SMTP服务器地址,主题,内容
		// sendEmil("public_test_email@126.com", "test123",emails, "smtp.126.com","XXX来电","我是XXX,请速回电话");
		 
		 //测试发送带有文本+图片+附件的文件
		//拥有多个收信人
		Map<String, String> emails2=new HashMap<String, String>();
		//map的key是收件人称呼,value是收件人邮箱地址
		emails.put("chentiefeng007", "chentiefeng007@126.com");
		emails.put("chentiefeng521", "chentiefeng521@163.com");
		
		//图片集
		Map<String, File> imagesMap=new HashMap<String, File>();
		//Map的key值是图片的访问路径:如:<img src='cid:test1'/>
		//value的值是图片文件
		imagesMap.put("test1", new File(System.getProperty("user.home")+File.separator+"Desktop"+File.separator+"testmm.jpg"));
		imagesMap.put("test2", new File(System.getProperty("user.home")+File.separator+"Desktop"+File.separator+"timg.jpg"));
		imagesMap.put("test3", new File(System.getProperty("user.home")+File.separator+"Desktop"+File.separator+"spring-overview.png"));
		
		//附件集
		List<File> fileList=new ArrayList<File>();
		fileList.add(new File(System.getProperty("user.home")+File.separator+"Desktop"+File.separator+"MyEmail.eml"));
		fileList.add(new File(System.getProperty("user.home")+File.separator+"Desktop"+File.separator+"cmd.txt"));
		fileList.add(new File(System.getProperty("user.home")+File.separator+"Desktop"+File.separator+"linux中java.docx"));
		
		//发送邮件
		sendEmil("public_test_email@126.com", "test123",emails2, "smtp.126.com","XXX来电","test a image<br><img src='cid:test1'/><br><img src='cid:test2'/><br><img src='cid:test3'/><br>",imagesMap,fileList);
	}

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * JCatalog Project */ package com.hexiang.utils; import java.util.List; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.Properties; import javax.mail.Session; import javax.mail.Transport; import javax.mail.Message; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.hexiang.exception.CatalogException; /** * Utility class to send email. * * @author <a href="380595305@qq.com">hexiang</a> */ public class EmailUtil { //the logger for this class private static Log logger = LogFactory.getLog("com.hexiang.util.EmailUtil"); /** * Send email to a single recipient. * * @param smtpHost the SMTP email server address * @param senderAddress the sender email address * @param senderName the sender name * @param receiverAddress the recipient email address * @param sub the subject of the email * @param msg the message content of the email */ public static void sendEmail(String smtpHost, String senderAddress, String senderName, String receiverAddress, String sub, String msg) throws CatalogException { List<String> recipients = new ArrayList<String>(); recipients.add(receiverAddress); sendEmail(smtpHost, senderAddress, senderName, recipients, sub, msg); } /** * Send email to a list of recipients. * * @param smtpHost the SMTP email server address * @param senderAddress the sender email address * @param senderName the sender name * @param recipients a list of receipients email addresses * @param sub the subject of the email * @param msg the message content of the email */ public static void sendEmail(String smtpHost, String senderAddress, String senderName, List<String> recipients, String sub, String msg) throws CatalogException { if (smtpHost == null) { String errMsg = "Could not send email: smtp host address is null"; logger.error(errMsg); throw new CatalogException(errMsg); } try { Properties props = System.getProperties(); props.put("mail.smtp.host", smtpHost); Session session = Session.getDefaultInstance(props, null ); MimeMessage message = new MimeMessage( session ); message.addHeader("Content-type", "text/plain"); message.setSubject(sub); message.setFrom(new InternetAddress(senderAddress, senderName)); for (Iterator<String> it = recipients.iterator(); it.hasNext();) { String email = (String)it.next(); message.addRecipients(Message.RecipientType.TO, email); } message.setText(msg); message.setSentDate( new Date() ); Transport.send(message); } catch (Exception e) { String errorMsg = "Could not send email"; logger.error(errorMsg, e); throw new CatalogException("errorMsg", e); } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值