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);

    }
}

笔记插图(第 5 页)

笔记插图(第 5 页)

笔记插图(第 5 页)

MyFileVo.java 564B

笔记插图(第 5 页)

笔记插图(第 5 页)

笔记插图(第 5 页)

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(“发送失败!”);

    }
}