From 58f7308d634e99bf7cf4a88bef75a97c7325454f Mon Sep 17 00:00:00 2001 From: minhee <alsdldlfrl@gmail.com> Date: 월, 21 2월 2022 11:10:29 +0900 Subject: [PATCH] - 각종 메일 메일 주소 안썼을 경우 테스트(메일주소 없을 경우 예외처리) --- src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 153 insertions(+), 24 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java index d6f06f8..1004513 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java @@ -7,20 +7,22 @@ import com.google.common.collect.Lists; import com.sun.mail.smtp.SMTPAddressFailedException; import kr.wisestone.owl.config.CommonConfiguration; +import kr.wisestone.owl.constant.ElasticSearchConstants; import kr.wisestone.owl.constant.MailConstants; import kr.wisestone.owl.constant.MsgConstants; +import kr.wisestone.owl.domain.Department; import kr.wisestone.owl.domain.SystemEmail; import kr.wisestone.owl.domain.User; +import kr.wisestone.owl.domain.UserDepartment; import kr.wisestone.owl.domain.enumType.EmailType; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.repository.SystemEmailRepository; import kr.wisestone.owl.service.SystemEmailService; +import kr.wisestone.owl.service.UserDepartmentService; import kr.wisestone.owl.service.UserService; -import kr.wisestone.owl.util.CommonUtil; -import kr.wisestone.owl.util.DateUtil; -import kr.wisestone.owl.util.MapUtil; -import kr.wisestone.owl.util.StringTemplateUtil; +import kr.wisestone.owl.util.*; import org.apache.commons.io.FilenameUtils; +import org.flywaydb.core.internal.util.scanner.filesystem.FileSystemResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -37,12 +39,11 @@ import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.SendFailedException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeUtility; +import javax.mail.internet.*; import java.io.IOException; import java.util.*; +import org.springframework.web.multipart.MultipartFile; import org.thymeleaf.context.Context; import org.thymeleaf.spring5.SpringTemplateEngine; @@ -63,6 +64,9 @@ @Autowired private SpringTemplateEngine springTemplateEngine; + @Autowired + private UserDepartmentService userDepartmentService; + @Override protected JpaRepository<SystemEmail, Long> getRepository() { return this.systemEmailRepository; @@ -73,6 +77,9 @@ @Value("${email.userName}") private String emailUserName; + + @Value("${email.sender}") + private String emailSender; // �씠硫붿씪 利됱떆 �쟾�넚 @Async @@ -96,7 +103,6 @@ locale = CommonUtil.getUserLanguage(loginUser.getLanguage()); } } - this.makeDirectContextEmail(emailType, params, locale, new String[]{CommonUtil.decryptAES128(sendUser)}); } } @@ -178,6 +184,24 @@ content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context); break; + case ISSUE_SEND_1: // �씠�뒋 �씠硫붿씪 �뀥�뵆由�1濡� ���긽�옄�뿉寃� 諛쒖넚 + mailConstants = MailConstants.ISSUE_SEND_1; + context = StringTemplateUtil.makeContext(params, locale); + content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context); + break; + + case ISSUE_SEND_2: // �씠�뒋 �씠硫붿씪 �뀥�뵆由�2濡� ���긽�옄�뿉寃� 諛쒖넚 + mailConstants = MailConstants.ISSUE_SEND_2; + context = StringTemplateUtil.makeContext(params, locale); + content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context); + break; + + case ISSUE_SEND_3: // �씠�뒋 �씠硫붿씪 �뀥�뵆由�3濡� ���긽�옄�뿉寃� 諛쒖넚 + mailConstants = MailConstants.ISSUE_SEND_3; + context = StringTemplateUtil.makeContext(params, locale); + content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context); + break; + case USER_JOIN_STATISTICS: // �씪�씪 �궗�슜�옄 媛��엯 �젙蹂� 諛쒖넚 mailConstants = MailConstants.USER_JOIN_STATISTICS; context = StringTemplateUtil.makeContext(params, locale); @@ -203,34 +227,77 @@ break; } - this.sendEmail(this.messageAccessor.message(mailConstants.getTitle(), locale), content, sendUsers, filePaths); + this.sendEmail(this.messageAccessor.message(mailConstants.getTitle(), locale), content, sendUsers, filePaths, null); } + + // �씠硫붿씪 �뀥�뵆由� 李얘린 + public String makeEmailContent(EmailType emailType, Map<String, Object> params) { + MailConstants mailConstants = null; + Context context; + String content = null; + //params.put("url", this.commonConfiguration.getEmailSendUrl()); + + Locale locale = Locale.getDefault(); + + switch (emailType) { + case ISSUE_SEND_1: // �씠�뒋 �씠硫붿씪 �뀥�뵆由�1濡� ���긽�옄�뿉寃� 諛쒖넚 + mailConstants = MailConstants.ISSUE_SEND_1; + context = StringTemplateUtil.makeContext(params, locale); + content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context); + break; + + case ISSUE_SEND_2: // �씠�뒋 �씠硫붿씪 �뀥�뵆由�2濡� ���긽�옄�뿉寃� 諛쒖넚 + mailConstants = MailConstants.ISSUE_SEND_2; + context = StringTemplateUtil.makeContext(params, locale); + content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context); + break; + + case ISSUE_SEND_3: // �씠�뒋 �씠硫붿씪 �뀥�뵆由�3濡� ���긽�옄�뿉寃� 諛쒖넚 + mailConstants = MailConstants.ISSUE_SEND_3; + context = StringTemplateUtil.makeContext(params, locale); + content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context); + break; + } + return content; + } + // �씠硫붿씪�쓣 諛쒖넚�븳�떎. @Override @Transactional(readOnly = true) - public void sendEmail(String subject, String content, String[] to, String[] filePaths) { + public void sendEmail(String subject, String content, String[] to, String[] filePaths, List<MultipartFile> multipartFiles) { MimeMessage message = this.javaMailSender.createMimeMessage(); try { - InternetAddress from = new InternetAddress(this.emailUserName, "OWL-ITS"); - MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "utf-8"); - messageHelper.setSubject(subject); - messageHelper.setText(content, true); - messageHelper.setFrom(from); - messageHelper.setTo(to); + if (this.emailSender != null && !this.emailSender.equals("") + && this.emailUserName != null && !this.emailUserName.equals("")) { - if (filePaths != null && filePaths.length > 0) { - for (String filePath : filePaths) { - if (!StringUtils.isEmpty(filePath)) { - DataSource dataSource = new FileDataSource(filePath); - messageHelper.addAttachment(MimeUtility.encodeText( - FilenameUtils.getBaseName(filePath), "utf-8", "B"), dataSource); + InternetAddress from = new InternetAddress(this.emailUserName, this.emailSender); + MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "utf-8"); + messageHelper.setSubject(subject); + messageHelper.setText(content, true); + messageHelper.setFrom(from); + messageHelper.setTo(to); + + if (multipartFiles != null && multipartFiles.size() > 0) { + for (MultipartFile file : multipartFiles) { + // �뙆�씪 泥⑤� + messageHelper.addAttachment(MimeUtility.encodeText(file.getOriginalFilename(), "utf-8", "B"), file); } } + + if (filePaths != null && filePaths.length > 0) { + for (String filePath : filePaths) { + if (!StringUtils.isEmpty(filePath)) { + DataSource dataSource = new FileDataSource(filePath); + messageHelper.addAttachment(MimeUtility.encodeText( + FilenameUtils.getBaseName(filePath), "utf-8", "B"), dataSource); + } + } + } + this.javaMailSender.send(message); } - this.javaMailSender.send(message); } catch (MailSendException e) { log.error(e.getMessage()); Exception[] exceptions = e.getMessageExceptions(); @@ -298,6 +365,37 @@ return results; } + // �봽濡쒖젥�듃�뿉�꽌 蹂�寃쎈맂 �떞�떦遺��꽌瑜� 李얘린 �쐞�빐 �궗�슜 + @Override + @Transactional(readOnly = true) + public List<String> notificationDepartmentChange(List<Department> totalDepartments, List<Department> targetDepartments) { + List<String> results = Lists.newArrayList(); + + // �젣�쇅 ���긽�옄 李얘린 + for (Department department : totalDepartments) { + boolean excludeCheck = true; + + for (Department newDepartment : targetDepartments) { + if (department.getId().equals(newDepartment.getId())) { + excludeCheck = false; + break; + } + } + + if (excludeCheck) { + /*List<UserDepartment> userDepartments = this.userDepartmentService.getUserDepartments(department.getId()); + if(userDepartments != null){ + for (UserDepartment userDepartment : userDepartments){ + User user = this.userService.getUser(userDepartment.getUserId()); + results.add(user.getAccount()); + } + }*/ + results.add(department.getDepartmentName()); + } + } + return results; + } + // �븘吏� 諛쒖넚�릺吏� �븡�� �씠硫붿씪�쓣 議고쉶�븳�떎. @Override @Transactional(readOnly = true) @@ -329,7 +427,38 @@ // �궡�슜�씠 �엳�쑝硫� 諛쒖넚 if (!StringUtils.isEmpty(emailBuilder.toString())) { // �씠硫붿씪�쓣 諛쒖넚�븳�떎. - this.sendEmail(this.messageAccessor.message(MsgConstants.RESERVATION_EMAIL_TITLE, locale), emailBuilder.toString(), new String[]{CommonUtil.decryptAES128(sendUser)}, null); + this.sendEmail(this.messageAccessor.message(MsgConstants.RESERVATION_EMAIL_TITLE, locale), emailBuilder.toString(), new String[]{CommonUtil.decryptAES128(sendUser)}, null, null); + this.systemEmailRepository.saveAll(systemEmails); + } + } + } + } + + // �떎�떆媛� �씠硫붿씪 諛쒖넚 + @Override + @Transactional + public void realTimeSendEmail() { + + List<String> sendUsers = this.userService.findByRealTimeNotifyTime(); + + for (String sendUser : sendUsers) { + // �궗�슜�옄 蹂꾨줈 �븘吏� 諛쒖넚�릺吏� �븡�� �씠硫붿씪�쓣 議고쉶�븳�떎. + List<SystemEmail> systemEmails = this.findBySendAddressAndSendYn(sendUser); + StringBuilder emailBuilder = new StringBuilder(); + User user = this.userService.findByAccount(sendUser); + + if (user != null) { + Locale locale = CommonUtil.getUserLanguage(user.getLanguage()); // 硫붿씪�쓣 諛쏅뒗 �궗�슜�옄媛� �궗�슜�븯怨� �엳�뒗 �뼵�뼱 �젙蹂대�� 媛��졇�삩�떎. + + for (SystemEmail systemEmail : systemEmails) { + // 諛쏅뒗 �궗�엺�쓽 �뼵�뼱濡� 蹂�寃쏀븯�뿬 �삁�빟�맂 �씠硫붿씪�쓣 諛쒖넚�븳�떎. + this.makeReservationContextEmail(emailBuilder, systemEmail, locale); + systemEmail.setSendYn(true); + } + // �궡�슜�씠 �엳�쑝硫� 諛쒖넚 + if (!StringUtils.isEmpty(emailBuilder.toString())) { + // �씠硫붿씪�쓣 諛쒖넚�븳�떎. + this.sendEmail(this.messageAccessor.message(MsgConstants.REALTIME_EMAIL_TITLE, locale), emailBuilder.toString(), new String[]{CommonUtil.decryptAES128(sendUser)}, null, null); this.systemEmailRepository.saveAll(systemEmails); } } -- Gitblit v1.8.0