diff --git a/backend/src/main/java/io/metersphere/notice/service/MailService.java b/backend/src/main/java/io/metersphere/notice/service/MailService.java index 64f8306391..a9b2e060c9 100644 --- a/backend/src/main/java/io/metersphere/notice/service/MailService.java +++ b/backend/src/main/java/io/metersphere/notice/service/MailService.java @@ -13,20 +13,19 @@ import io.metersphere.service.SystemParameterService; import io.metersphere.service.UserService; import io.metersphere.track.request.testreview.SaveCommentRequest; import io.metersphere.track.request.testreview.SaveTestCaseReviewRequest; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.io.IOUtils; +import org.flywaydb.core.internal.util.StringUtils; import org.springframework.mail.MailException; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; - import javax.annotation.Resource; -import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; +import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Properties; +import java.util.*; @Service public class MailService { @@ -38,31 +37,7 @@ public class MailService { private SystemParameterService systemParameterService; public void sendHtml(String id, List notice, String status, String type) { - JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); - List paramList = systemParameterService.getParamList(ParamConstants.Classify.MAIL.getValue()); - javaMailSender.setDefaultEncoding("UTF-8"); - javaMailSender.setProtocol("smtps"); - for (SystemParameter p : paramList) { - if (p.getParamKey().equals("smtp.host")) { - javaMailSender.setHost(p.getParamValue()); - } - if (p.getParamKey().equals("smtp.port")) { - javaMailSender.setPort(Integer.parseInt(p.getParamValue())); - } - if (p.getParamKey().equals("smtp.account")) { - javaMailSender.setUsername(p.getParamValue()); - } - if (p.getParamKey().equals("smtp.password")) { - javaMailSender.setPassword(EncryptUtils.aesDecrypt(p.getParamValue()).toString()); - } - } - Properties props = new Properties(); - props.put("mail.smtp.auth", "true"); - props.put("mail.smtp.starttls.enable", "true"); - props.put("mail.smtp.starttls.required", "true"); - props.put("mail.smtp.timeout", "30000"); - props.put("mail.smtp.connectiontimeout", "5000"); - javaMailSender.setJavaMailProperties(props); + JavaMailSenderImpl javaMailSender = getMailSender(); MimeMessage mimeMessage = javaMailSender.createMimeMessage(); String testName = ""; if (type.equals("api")) { @@ -73,38 +48,19 @@ public class MailService { testName = performanceResult.getName(); status = performanceResult.getStatus(); } - String html1 = "\n" + - "\n" + - "\n" + - " \n" + - " MeterSphere\n" + - "\n" + - "\n" + - "
\n" + - "

" + type + Translator.get("timing_task_result_notification") + "

\n" + - "

尊敬的用户:您好,


" + - "

您所执行的" + testName + "运行失败

\n" + - "
\n" + - "\n" + - ""; - String html2 = "\n" + - "\n" + - "\n" + - " \n" + - " MeterSphere\n" + - "\n" + - "\n" + - "
\n" + - "

" + type + Translator.get("timing_task_result_notification") + "

\n" + - "

尊敬的用户:您好," + testName + "运行成功

\n" + - "
\n" + - "\n" + - ""; + + Map context = new HashMap<>(); + context.put("title", type + Translator.get("timing_task_result_notification")); + context.put("testName", testName); + try { + String failTemplate = IOUtils.toString(this.getClass().getResource("/mail/fail.html"), StandardCharsets.UTF_8); + String successTemplate = IOUtils.toString(this.getClass().getResource("/mail/success.html"), StandardCharsets.UTF_8); + MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom(javaMailSender.getUsername()); helper.setSubject(Translator.get("timing_task_result_notification")); - String users[] = {}; + String[] users; List successEmailList = new ArrayList<>(); List failEmailList = new ArrayList<>(); if (notice.size() > 0) { @@ -115,23 +71,20 @@ public class MailService { if (n.getEnable().equals("true") && n.getEvent().equals("执行失败")) { failEmailList = userService.queryEmail(n.getNames()); } - } } else { LogUtil.error("Recipient information is empty"); } if (status.equals("Success")) { - users = successEmailList.toArray(new String[successEmailList.size()]); - helper.setText(html2, true); + users = successEmailList.toArray(new String[0]); + helper.setText(getContent(successTemplate, context), true); } else { - users = failEmailList.toArray(new String[failEmailList.size()]); - helper.setText(html1, true); - + users = failEmailList.toArray(new String[0]); + helper.setText(getContent(failTemplate, context), true); } helper.setTo(users); - - } catch (MessagingException e) { + } catch (Exception e) { LogUtil.error(e); } try { @@ -141,6 +94,13 @@ public class MailService { } } + private String getContent(String template, Map context) { + if (MapUtils.isNotEmpty(context)) { + context.forEach((k, v) -> StringUtils.replaceAll(template, "${" + k + "}", v)); + } + return template; + } + public void sendHtml(List userIds, String type, SaveTestCaseReviewRequest reviewRequest, SaveCommentRequest request, TestCaseWithBLOBs testCaseWithBLOBs) { Long startTime = reviewRequest.getCreateTime(); @@ -156,6 +116,61 @@ public class MailService { if (!eTime.equals("null")) { end = sdf.format(new Date(Long.parseLong(eTime))); } + JavaMailSenderImpl javaMailSender = getMailSender(); + MimeMessage mimeMessage = javaMailSender.createMimeMessage(); + + Map context = new HashMap<>(); + context.put("creator", reviewRequest.getCreator()); + context.put("maintainer", testCaseWithBLOBs.getMaintainer()); + context.put("testCaseName", testCaseWithBLOBs.getName()); + context.put("reviewName", reviewRequest.getName()); + context.put("description", reviewRequest.getDescription()); + context.put("start", start); + context.put("end", end); + + try { + String reviewerTemplate = IOUtils.toString(this.getClass().getResource("/mail/reviewer.html"), StandardCharsets.UTF_8); + String commentTemplate = IOUtils.toString(this.getClass().getResource("/mail/comment.html"), StandardCharsets.UTF_8); + String endTemplate = IOUtils.toString(this.getClass().getResource("/mail/end.html"), StandardCharsets.UTF_8); + + + MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); + helper.setFrom(javaMailSender.getUsername()); + helper.setSubject(Translator.get("test_review_task_notice")); + String[] users; + List emails = new ArrayList<>(); + try { + emails = userService.queryEmailByIds(userIds); + } catch (Exception e) { + LogUtil.error("Recipient information is empty"); + } + users = emails.toArray(new String[0]); + switch (type) { + case "reviewer": + helper.setText(getContent(reviewerTemplate, context), true); + break; + case "comment": + helper.setText(getContent(commentTemplate, context), true); + break; + case "end": + helper.setText(getContent(endTemplate, context), true); + break; + default: + break; + } + helper.setTo(users); + + } catch (Exception e) { + LogUtil.error(e); + } + try { + javaMailSender.send(mimeMessage); + } catch (MailException e) { + LogUtil.error(e); + } + } + + private JavaMailSenderImpl getMailSender() { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); List paramList = systemParameterService.getParamList(ParamConstants.Classify.MAIL.getValue()); javaMailSender.setDefaultEncoding("UTF-8"); @@ -181,72 +196,7 @@ public class MailService { props.put("mail.smtp.timeout", "30000"); props.put("mail.smtp.connectiontimeout", "5000"); javaMailSender.setJavaMailProperties(props); - MimeMessage mimeMessage = javaMailSender.createMimeMessage(); - String html1 = "\n" + - "\n" + - "\n" + - " \n" + - " MeterSphere\n" + - "\n" + - "\n" + - "
\n" + - "

" + reviewRequest.getCreator() + "发起的:" + "


" + reviewRequest.getName() + "


" + "计划开始时间是" + start + ",计划结束时间为" + end + "请跟进" + "

\n" + - "
\n" + - "\n" + - ""; - String html2 = "\n" + - "\n" + - "\n" + - " \n" + - " MeterSphere\n" + - "\n" + - "\n" + - "
\n" + - "

" + testCaseWithBLOBs.getMaintainer() + "发起的" + "


" + testCaseWithBLOBs.getName() + "


" + "添加评论:" + request.getDescription() + "

\n" + - "
\n" + - "\n" + - ""; - String html3 = "\n" + - "\n" + - "\n" + - " \n" + - " MeterSphere\n" + - "\n" + - "\n" + - "
\n" + - "

" + reviewRequest.getCreator() + "发起的:" + "


" + reviewRequest.getName() + "


" + "计划开始时间是" + start + ",计划结束时间为" + end + "已完成" + "

\n" + - "
\n" + - "\n" + - ""; - try { - MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); - helper.setFrom(javaMailSender.getUsername()); - helper.setSubject(Translator.get("test_review_task_notice")); - String users[] = {}; - List emails = new ArrayList<>(); - try { - emails = userService.queryEmailByIds(userIds); - } catch (Exception e) { - LogUtil.error("Recipient information is empty"); - } - users = emails.toArray(new String[emails.size()]); - if (type.equals("reviewer")) { - helper.setText(html1, true); - } else if (type.equals("comment")) { - helper.setText(html2, true); - } else if (type.equals("end")) { - helper.setText(html3, true); - } - helper.setTo(users); - - } catch (MessagingException e) { - LogUtil.error(e); - } - try { - javaMailSender.send(mimeMessage); - } catch (MailException e) { - LogUtil.error(e); - } + return javaMailSender; } } diff --git a/backend/src/main/resources/mail/comment.html b/backend/src/main/resources/mail/comment.html new file mode 100644 index 0000000000..8749c5ada6 --- /dev/null +++ b/backend/src/main/resources/mail/comment.html @@ -0,0 +1,12 @@ + + + + + MeterSphere + + +
+

${maintainer} 发起的


${testCaseName}


添加评论:${description}

+
+ + \ No newline at end of file diff --git a/backend/src/main/resources/mail/end.html b/backend/src/main/resources/mail/end.html new file mode 100644 index 0000000000..a3503ebcd8 --- /dev/null +++ b/backend/src/main/resources/mail/end.html @@ -0,0 +1,12 @@ + + + + + MeterSphere + + +
+

${creator} 发起的:


${reviewName}


计划开始时间是 ${start}, 计划结束时间为 ${end} 已完成

+
+ + \ No newline at end of file diff --git a/backend/src/main/resources/mail/fail.html b/backend/src/main/resources/mail/fail.html new file mode 100644 index 0000000000..420625b4a4 --- /dev/null +++ b/backend/src/main/resources/mail/fail.html @@ -0,0 +1,15 @@ + + + + + MeterSphere + + +
+

${title}

+

尊敬的用户:您好, +


+

您所执行的 ${testName} 运行失败

+
+ + \ No newline at end of file diff --git a/backend/src/main/resources/mail/reviewer.html b/backend/src/main/resources/mail/reviewer.html new file mode 100644 index 0000000000..16e610d44c --- /dev/null +++ b/backend/src/main/resources/mail/reviewer.html @@ -0,0 +1,12 @@ + + + + + MeterSphere + + +
+

${creator} 发起的:


${reviewName}


计划开始时间是 ${start},计划结束时间为 ${end} 请跟进

+
+ + \ No newline at end of file diff --git a/backend/src/main/resources/mail/success.html b/backend/src/main/resources/mail/success.html new file mode 100644 index 0000000000..b0a711a356 --- /dev/null +++ b/backend/src/main/resources/mail/success.html @@ -0,0 +1,15 @@ + + + + + MeterSphere + + +
+

${title}

+

尊敬的用户:您好, +


+

您所执行的 ${testName} 运行成功

+
+ + \ No newline at end of file