package com.xzx.log.service;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.thread.ThreadUtil;
|
import cn.hutool.core.util.ReflectUtil;
|
import com.xzx.log.constants.Constants;
|
import com.xzx.log.entity.IntefaceAdminLog;
|
import com.xzx.log.util.SpringUtil;
|
import freemarker.template.Configuration;
|
import freemarker.template.Template;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.mail.javamail.JavaMailSender;
|
import org.springframework.mail.javamail.MimeMessageHelper;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Service;
|
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
|
|
import javax.mail.internet.MimeMessage;
|
import java.util.List;
|
|
@Service
|
@Slf4j
|
public class MailService {
|
|
@Autowired
|
private JavaMailSender sender;
|
|
@Autowired
|
private Configuration freemarkerConfig;
|
|
@Value("${spring.mail.username}")
|
private String from;
|
|
@Value("${spring.mail.to}")
|
private String to;
|
|
public <T> void sendEmail(String serviceName, T t) {
|
MimeMessage message = sender.createMimeMessage();
|
|
MimeMessageHelper helper = new MimeMessageHelper(message);
|
|
freemarkerConfig.setClassForTemplateLoading(this.getClass(), "/templates");
|
|
Template template = null;
|
try {
|
template = freemarkerConfig.getTemplate("email-template.ftl");
|
String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, t);
|
helper.setFrom(from);
|
helper.setTo(to.split(","));
|
helper.setText(text, true);
|
helper.setSubject("小棕熊" + serviceName + "错误");
|
sender.send(message);
|
log.info("发送邮件完成");
|
} catch (Exception e) {
|
log.error("邮件发送失败", e);
|
}
|
}
|
|
@Async
|
public <T> void sendEmail(List<T> list) {
|
if (CollUtil.isNotEmpty(list) && SpringUtil.isProd()) {
|
//只在生产环境发送邮件
|
for (T t : list) {
|
String logLevel = (String) ReflectUtil.getFieldValue(t, "logLevel");
|
String implementType = (String) ReflectUtil.getFieldValue(t, "implementType");
|
String serviceName = "";
|
if (Constants.ADMIN_TYPE.equals(implementType)) {
|
serviceName = "后台系统";
|
} else if (Constants.INTEFACE_TYPE.equals(implementType)) {
|
serviceName = "前端接口";
|
}
|
if (Constants.ERROR_LEVEL.equals(logLevel)) {
|
sendEmail(serviceName, t);
|
}
|
}
|
|
}
|
|
}
|
}
|