packagecom.bootdo.oa.service.impl;importcom.bootdo.common.exception.SystemException;importcom.bootdo.oa.domain.MailDO;importcom.bootdo.oa.service.MailService;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.core.io.FileSystemResource;importorg.springframework.mail.MailException;importorg.springframework.mail.SimpleMailMessage;importorg.springframework.mail.javamail.JavaMailSender;importorg.springframework.mail.javamail.MimeMessageHelper;importorg.springframework.scheduling.annotation.Async;importorg.springframework.stereotype.Service;importorg.thymeleaf.TemplateEngine;importorg.thymeleaf.context.Context;importjavax.mail.MessagingException;importjavax.mail.internet.MimeMessage;importjava.io.File;/*** 发送邮件*/@Servicepublic class MailServiceImpl implementsMailService {private final static Logger log = LoggerFactory.getLogger(MailServiceImpl.class);//template模板引擎
@AutowiredprivateTemplateEngine templateEngine;
@AutowiredprivateJavaMailSender javaMailSender;
@Value("${spring.mail.username}")privateString from;/*** 纯文本邮件
*@parammail*/@Async //不解释不懂自行百度,友情提示:有坑
@Overridepublic voidsendTextMail(MailDO mail){//建立邮件消息
SimpleMailMessage message = newSimpleMailMessage();
message.setFrom(from);//发送人的邮箱
message.setSubject(mail.getTitle()); //标题
message.setTo(mail.getEmail()); //发给谁 对方邮箱
message.setText(mail.getContent()); //内容
try{
javaMailSender.send(message);//发送
} catch(MailException e) {
log.error("纯文本邮件发送失败->message:{}",e.getMessage());throw new SystemException("邮件发送失败");
}
}/*** 发送的邮件是富文本(附件,图片,html等)
*@parammailDO
*@paramisShowHtml 是否解析html*/@Async
@Overridepublic void sendHtmlMail(MailDO mailDO, booleanisShowHtml) {try{
MimeMessage mimeMessage=javaMailSender.createMimeMessage();//是否发送的邮件是富文本(附件,图片,html等)
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage,true);
messageHelper.setFrom(from);//发送人的邮箱
messageHelper.setTo(mailDO.getEmail());//发给谁 对方邮箱
messageHelper.setSubject(mailDO.getTitle());//标题
messageHelper.setText(mailDO.getContent(),isShowHtml);//false,显示原始html代码,无效果//判断是否有附加图片等
if(mailDO.getAttachment() != null && mailDO.getAttachment().size() > 0){
mailDO.getAttachment().entrySet().stream().forEach(entrySet->{try{
File file= newFile(String.valueOf(entrySet.getValue()));if(file.exists()){
messageHelper.addAttachment(entrySet.getKey(),newFileSystemResource(file));
}
}catch(MessagingException e) {
log.error("附件发送失败->message:{}",e.getMessage());throw new SystemException("附件发送失败");
}
});
}//发送
javaMailSender.send(mimeMessage);
}catch(MessagingException e) {
log.error("富文本邮件发送失败->message:{}",e.getMessage());throw new SystemException("邮件发送失败");
}
}/*** 发送模板邮件 使用thymeleaf模板
* 若果使用freemarker模板
* Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
* configuration.setClassForTemplateLoading(this.getClass(), "/templates");
* String emailContent = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("mail.ftl"), params);
*@parammailDO*/@Async
@Overridepublic voidsendTemplateMail(MailDO mailDO) {try{
MimeMessage mimeMessage=javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper= new MimeMessageHelper(mimeMessage,true);
messageHelper.setFrom(from);//发送人的邮箱
messageHelper.setTo(mailDO.getEmail());//发给谁 对方邮箱
messageHelper.setSubject(mailDO.getTitle()); //标题//使用模板thymeleaf//Context是导这个包import org.thymeleaf.context.Context;
Context context = newContext();//定义模板数据
context.setVariables(mailDO.getAttachment());//获取thymeleaf的html模板
String emailContent = templateEngine.process("/mail/mail",context); //指定模板路径
messageHelper.setText(emailContent,true);//发送邮件
javaMailSender.send(mimeMessage);
}catch(MessagingException e) {
log.error("模板邮件发送失败->message:{}",e.getMessage());throw new SystemException("邮件发送失败");
}
}
}