diff --git a/mallinkAdmin/src/main/resources/application.yml b/mallinkAdmin/src/main/resources/application.yml index 02d57967c..8b2dca921 100644 --- a/mallinkAdmin/src/main/resources/application.yml +++ b/mallinkAdmin/src/main/resources/application.yml @@ -21,7 +21,16 @@ spring: cache-names: redis_cache #缓存的名字(可以不指定) redis: time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒) - + mail: + host: smtp.exmail.qq.com + username: wuguoqiang@iformall.com + password: SL4ZBgG3pXWqpAk3 # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true # @{link} https://github.com/abel533 #Mybatis diff --git a/mallinkBApi/src/main/resources/application.yml b/mallinkBApi/src/main/resources/application.yml index 83ae69c9e..3e27ac7f8 100644 --- a/mallinkBApi/src/main/resources/application.yml +++ b/mallinkBApi/src/main/resources/application.yml @@ -13,6 +13,16 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 default-property-inclusion: non_null + mail: + host: smtp.exmail.qq.com + username: wuguoqiang@iformall.com + password: SL4ZBgG3pXWqpAk3 # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true # @{link} https://github.com/abel533 #Mybatis diff --git a/mallinkCApi/src/main/resources/application.yml b/mallinkCApi/src/main/resources/application.yml index 8b879c976..eebcee65e 100644 --- a/mallinkCApi/src/main/resources/application.yml +++ b/mallinkCApi/src/main/resources/application.yml @@ -12,6 +12,16 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 default-property-inclusion: non_null + mail: + host: smtp.exmail.qq.com + username: wuguoqiang@iformall.com + password: SL4ZBgG3pXWqpAk3 # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true # @{link} https://github.com/abel533 diff --git a/mallinkSchedule/src/main/resources/application.yml b/mallinkSchedule/src/main/resources/application.yml index b7e6a74a0..d7f73fa8b 100644 --- a/mallinkSchedule/src/main/resources/application.yml +++ b/mallinkSchedule/src/main/resources/application.yml @@ -21,6 +21,16 @@ spring: cache-names: redis_cache #缓存的名字(可以不指定) redis: time-to-live: 60000ms #很重要,缓存的有效时间,以便缓存的过期(单位为毫秒) + mail: + host: smtp.exmail.qq.com + username: wuguoqiang@iformall.com + password: SL4ZBgG3pXWqpAk3 # 授权密码 + properties: + mail: + smtp: + auth: true + starttls: + enable: true # @{link} https://github.com/abel533 diff --git a/mallinkService/src/main/java/com/iformall/common/GlobalDefultExceptionHandler.java b/mallinkService/src/main/java/com/iformall/common/GlobalDefultExceptionHandler.java new file mode 100644 index 000000000..206adf796 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/common/GlobalDefultExceptionHandler.java @@ -0,0 +1,68 @@ +package com.iformall.common; + + +import com.iformall.exception.MallinkException; +import com.iformall.service.MailService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Enumeration; + +@ControllerAdvice +public class GlobalDefultExceptionHandler { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private MailService mailService; + + @ExceptionHandler(Exception.class) + @ResponseBody + public String defultExcepitonHandler(HttpServletRequest request, Exception e) { + log(e, request); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 + + StringBuilder sb = new StringBuilder(); + sb.append(df.format(new Date())); + sb.append("\n"); + sb.append(sw.toString()); + + String[] receivers = new String[] {"hupeng@iformall.com", "wuguoqiang@iformall.com", "gongbiao@iformall.com"}; + + //发送邮件 + mailService.sendSimpleMail(receivers, "请求地址:" + request.getRequestURL() + "异常", sb.toString()); + + return "发生异常"; + } + + private void log(Exception ex, HttpServletRequest request) { + logger.error("************************异常开始*******************************"); + logger.error("请求地址:" + request.getRequestURL()); + Enumeration enumeration = request.getParameterNames(); + logger.error("请求参数"); + while (enumeration.hasMoreElements()) { + String name = enumeration.nextElement().toString(); + logger.error(name + "---" + request.getParameter(name)); + } + + StackTraceElement[] error = ex.getStackTrace(); + for (StackTraceElement stackTraceElement : error) { + logger.error(stackTraceElement.toString()); + } + logger.error("************************异常结束*******************************"); + } +} diff --git a/mallinkService/src/main/java/com/iformall/service/MailService.java b/mallinkService/src/main/java/com/iformall/service/MailService.java new file mode 100644 index 000000000..01020a3a3 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/MailService.java @@ -0,0 +1,131 @@ +package com.iformall.service; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.FileSystemResource; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.io.File; + +@Service +public class MailService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private JavaMailSender sender; + + @Value("${spring.mail.username}") + private String from; + + /** + * 发送纯文本的简单邮件 + * @param to + * @param subject + * @param content + */ + public void sendSimpleMail(String[] to, String subject, String content){ + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(from); + message.setTo(to); + message.setSubject(subject); + message.setText(content); + + try { + sender.send(message); + logger.info("简单邮件已经发送。"); + } catch (Exception e) { + logger.error("发送简单邮件时发生异常!", e); + } + } + + /** + * 发送html格式的邮件 + * @param to + * @param subject + * @param content + */ + public void sendHtmlMail(String to, String subject, String content){ + MimeMessage message = sender.createMimeMessage(); + + try { + //true表示需要创建一个multipart message + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + + sender.send(message); + logger.info("html邮件已经发送。"); + } catch (MessagingException e) { + logger.error("发送html邮件时发生异常!", e); + } + } + + /** + * 发送带附件的邮件 + * @param to + * @param subject + * @param content + * @param filePath + */ + public void sendAttachmentsMail(String to, String subject, String content, String filePath){ + MimeMessage message = sender.createMimeMessage(); + + try { + //true表示需要创建一个multipart message + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + + FileSystemResource file = new FileSystemResource(new File(filePath)); + String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); + helper.addAttachment(fileName, file); + + sender.send(message); + logger.info("带附件的邮件已经发送。"); + } catch (MessagingException e) { + logger.error("发送带附件的邮件时发生异常!", e); + } + } + + /** + * 发送嵌入静态资源(一般是图片)的邮件 + * @param to + * @param subject + * @param content 邮件内容,需要包括一个静态资源的id,比如: + * @param rscPath 静态资源路径和文件名 + * @param rscId 静态资源id + */ + public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){ + MimeMessage message = sender.createMimeMessage(); + + try { + //true表示需要创建一个multipart message + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + + FileSystemResource res = new FileSystemResource(new File(rscPath)); + helper.addInline(rscId, res); + + sender.send(message); + logger.info("嵌入静态资源的邮件已经发送。"); + } catch (MessagingException e) { + logger.error("发送嵌入静态资源的邮件时发生异常!", e); + } + } + +} diff --git a/pom.xml b/pom.xml index 22d5fed14..b5cb6e1f3 100644 --- a/pom.xml +++ b/pom.xml @@ -77,6 +77,11 @@ spring-boot-starter-web-services + + org.springframework.boot + spring-boot-starter-mail + + org.mybatis.spring.boot mybatis-spring-boot-starter