项目中要发送邮件,写个工具类,小项目,并发量不高,但是要求:
1.发件人是163邮箱或qq邮箱
2.支持多个接收人/抄送人/暗送人
3.支持正文中放图片
4.支持附件
5.线程池异步处理
6.发送异常时,调用开发员自定义的异常处理类
使用原生的java的mail.jar的API开发,需要自己调用组装很多API,MimeMessageHelper帮助类进行简化了很多步骤,用起来挺不错的。由于项目使用了spring boot,所以在pom.xml中只需添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
即可。
因为邮件发送有时耗时较长,所以代码中使用了线程池异步发送。下面先贴代码,再说需要注意的事项。
异常接口,当邮件发送失败,需要做额外处理时,开发员实现该接口。
package com.nanhe.building.util;
import com.alibaba.fastjson.JSONObject;
/**
* 邮件发送异常处理
* @author Jfei
*
*/
public interface MailSendExceptionHandler {
/**
* 当邮件发送出现异常时,调用此方法
* @param e 异常类
* @param params 调用邮件工具类发送是传的参数,便于日志记录跟踪
*/
void doForException(Exception e,JSONObject params);
}
工具类
package com.nanhe.building.util;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import com.alibaba.fastjson.JSONObject;
/**
* 邮件发送(注意发送人的邮箱必须设置开通POP3/SMTP/IMAP,否则无法发送)
* @author Jfei
*
*/
public class MailUtil {
/**
* 线程池,最多同时3个线程在运行,其他的排队等候
*/
private static ExecutorService executor = Executors.newFixedThreadPool(3);
/**
* 发送邮件(注意发送人的邮箱必须设置开通POP3/SMTP/IMAP,否则无法发送)
* @param sendUserAccount 发送人email账号(163或者qq邮箱) (必填)
* @param sendUserPassword 发送人email的授权码(必填)
* @param sendUserNick