springboot集成Email
需要引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
package com.glight.epdmic.template;
import com.glight.epdmic.dao.MailHistoryDao;
import com.glight.epdmic.entity.MailHistory;
import com.gilite.cn.model.ResultEntity;
import com.glight.epdmic.util.FileUtil;
import com.glight.epdmic.vo.MailVo;
import com.glight.epdmic.vo.MyFileVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StopWatch;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.mail.internet.MimeUtility;
import java.util.Date;
import java.util.UUID;
/**
* @program: JHMailTemplate
* @description: mail返送工具类
* @author: douxiaoliang
* @create: 2020-04-18 14:16
* @Version V1.0
**/
@Component
public class JHMailTemplate {
Logger logger = LoggerFactory.getLogger(JHMailTemplate.class);
@Autowired
private JavaMailSenderImpl mailSender;//注入邮件工具类
@Autowired
private MailHistoryDao mailHistoryDao;
//后加的防止题目过长并且进行全局定义
static {
System.setProperty(“mail.mime.splitlongparameters”,“false”);
System.setProperty(“mail.mime.charset”,“UTF-8”);
}
@Async
@Transactional
public void sendMail(MailVo mailVo){
try{
StopWatch sw = new StopWatch(“sendMail”);
sw.start(“checkMail”);
this.checkMail(mailVo);//1.检测邮件
sw.stop();
sw.start(“sendMimeMail”);
Boolean sendFlag = this.sendMimeMail(mailVo);//2.发送邮件
sw.stop();
sw.start(“insertMail”);
if (sendFlag){
this.insertMailHistory(mailVo);
sw.stop();
logger.info(“各部分执行时间:{}",sw.prettyPrint());
}
}catch(Exception e){
logger.error(e.getLocalizedMessage());
}
}
//检测邮件信息类
private void checkMail(MailVo mailVo){
logger.info(“检查发送给{}邮件是否规范”,mailVo.getTo());
if(StringUtils.isEmpty(mailVo.getTo())){
throw new RuntimeException(“邮件收信人不能为空”);
}
if(StringUtils.isEmpty(mailVo.getSubject())){
throw new RuntimeException(“邮件主题不能为空”);
}
if(StringUtils.isEmpty(mailVo.getText())){
throw new RuntimeException(“邮件内容不能为空”);
}
}
//构建复杂邮件信息类
private boolean sendMimeMail(MailVo mailVo){
try{
//true表示支持复杂类型
MimeMessageHelper messageHelper=new
MimeMessageHelper(mailSender.createMimeMessage(),true,“UTF-8”);
//mailVo.setFrom(getMailSendFrom());//邮件发信人从配置项读取
messageHelper.setFrom(mailVo.getFrom());//邮件发信人
messageHelper.setTo(mailVo.getTo().split(”,"));//邮件收信人
messageHelper.setSubject(mailVo.getSubject());//邮件主题
messageHelper.setText(mailVo.getText());//邮件内容
if(!StringUtils.isEmpty(mailVo.getCc())){//抄送
messageHelper.setCc(mailVo.getCc().split(","));
}
if(!StringUtils.isEmpty(mailVo.getBcc())){//密送
messageHelper.setCc(mailVo.getBcc().split(","));
}
if(mailVo.getMultipartFiles()!=null){//添加邮件附件
for(MultipartFile multipartFile:mailVo.getMultipartFiles()){
messageHelper.addAttachment(MimeUtility.encodeWord(multipartFile.getOriginalFilename()
,“UTF-8”,“B”),multipartFile);
}
}
if (mailVo.getMyFileVos()!=null){
for (MyFileVo myFileVo:mailVo.getMyFileVos()){
String f = MimeUtility.encodeWord(myFileVo.getFileName(),“UTF-8”,null);
messageHelper.addAttachment(f,new
ByteArrayResource(FileUtil.toByteArray(myFileVo.getInputStreamSource().getInputStream(
))));
}
}
if(StringUtils.isEmpty(mailVo.getSentDate())){//发送时间
mailVo.setSentDate(new Date());
}
messageHelper.setSentDate(mailVo.getSentDate());
mailSender.send(messageHelper.getMimeMessage());//正式发送邮件
mailVo.setStatus(1);
logger.info(">>>邮件已发送给:{}。",mailVo.getTo());
return true;
}catch(Exception e){
logger.error(e.getMessage());//发送失败
return false;
}
}
//获取邮件发信人
public String getMailSendFrom(){
return mailSender.getJavaMailProperties().getProperty(“from”);
}
//检测邮件信息类
private void insertMailHistory(MailVo mailVo){
logger.info(“写入发送给{}的邮件流水记录。",mailVo.getTo());
MailHistory mailHistory = new
MailHistory(StringUtils.isEmpty(mailVo.getFromName())?
mailVo.getFrom():mailVo.getFromName()
,mailVo.getFrom()
,StringUtils.isEmpty(mailVo.getToName())?mailVo.getTo():mailVo.getToName()
,mailVo.getTo()
,mailVo.getDataDate()
,mailVo.getStatus(),mailVo.getType());
mailHistoryDao.insert(mailHistory);
}
}



MyFileVo.java 564B



MailVo.java 1.08KB
public ResultEntity sendAbnormalCollegeMail(String date,String collegeCode){
try {
List<AbnormalWarningMailVo> abnormalWarningVos =
abnormalWarningDao.getAbnormalStuBy(date,null,collegeCode,null,null,null);
List<DeptLeader> deptLeaders = deptLeaderDao.getListByDeptCode(collegeCode);
StringBuffer excelName = new StringBuffer();
String deptName = null;
if (!CollectionUtils.isEmpty(deptLeaders)){
deptName = deptLeaders.get(0).getDeptName();
excelName.append(deptName).append(bar);
}
excelName.append(“疫情防控风险统计详
情”).append(date.replace(bar,”")).append(".xlsx");
Workbook workbook =
DefaultExcelBuilder.of(AbnormalWarningMailVo.class).fixedTitles().build(abnormalWarning
Vos);
MailVo mailVo = new MailVo();
mailVo.setFrom(fromEmail);
String emails = this.getAllFromEmail(deptLeaders);
mailVo.setTo(emails);
mailVo.setToName(collegeCode);
mailVo.setDataDate(new SimpleDateFormat(“yyyy-MM-dd”).parse(date));
mailVo.setCc(fromEmail);
mailVo.setSubject(deptName+“疫情防控风险统计详情”);
mailVo.setText(mailText);
mailVo.setType(1);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
InputStreamSource inputStreamSource = new InputStreamResource(new
ByteArrayInputStream(bos.toByteArray()));
mailVo.setMyFileVos(new ArrayList<MyFileVo>(){{
add(new MyFileVo(excelName.toString(),inputStreamSource));
}});
jhMailTemplate.sendMail(mailVo);
return ResultEntity.success();
}catch (Exception e){
return ResultEntity.fail(“发送失败!”);
}
}