OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-01 2ba4d0379a7e5ac1d0fb36a8891bee4f0490f201
이슈 이메일 전송 백엔드 수정
4개 파일 추가됨
8개 파일 변경됨
658 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MailConstants.java 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 12 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/util/ConvertUtil.java 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java 29 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/HostingFieldForm.java 29 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/IspFieldForm.java 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/IssueForm.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/UsePartnerForm.java 56 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mails/issueSendEmailTemplate1.html 161 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mails/issueSendEmailTemplate2.html 161 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mails/issueSendEmailTemplate3.html 161 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MailConstants.java
@@ -31,11 +31,10 @@
    ISSUE_ADD("issue.add.title", "issueAddEmail"),  //  이슈 생성
    ISSUE_REMOVE("issue.remove.title", "issueRemoveEmail"), //  이슈 삭제
    ISSUE_SEND("issue.send.title", "issueSendEmail"), //  이슈 이메일 전달
    ISSUE_SEND_1("issue.send1.title", "issueSend1Email"), //  이슈 이메일 전달
    ISSUE_SEND_2("issue.send2.title", "issueSend2Email"), //  이슈 이메일 전달
    ISSUE_SEND_3("issue.send3.title", "issueSend3Email"); //  이슈 이메일 전달
    ISSUE_SEND_1("issue.send1.title", "issueSendEmailTemplate1"), //  이슈 이메일 템플릿1 전달
    ISSUE_SEND_2("issue.send2.title", "issueSendEmailTemplate2"), //  이슈 이메일 템플릿2 전달
    ISSUE_SEND_3("issue.send3.title", "issueSendEmailTemplate3"); //  이슈 이메일 템플릿3 전달
    //  ISSUE_MODIFY("issue.modify.title", "issueModifyEmail"); //  이슈 수정
    private String title;
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -2617,12 +2617,12 @@
        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_ANOTHER_USER_SEND_EMAIL));
        //this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND, issueMap, null);
        if(issueForm.getTemplate().equals("SEND1")){
            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_1, issueMap, null);
        }else if(issueForm.getTemplate().equals("SEND2")){
            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_2, issueMap, null);
        }else if(issueForm.getTemplate().equals("SEND3")){
            this.systemEmailService.directEmail(issueForm.getSendEmails().toArray(new String[issueForm.getSendEmails().size()]), EmailType.ISSUE_SEND_3, issueMap, null);
        if(issueForm.getTemplate().equals(EmailType.ISSUE_SEND_1.toString())){
            this.systemEmailService.directEmail(ConvertUtil.ToArray(issueForm.getSendEmails()), EmailType.ISSUE_SEND_1, issueMap, null);
        }else if(issueForm.getTemplate().equals(EmailType.ISSUE_SEND_2.toString())){
            this.systemEmailService.directEmail(ConvertUtil.ToArray(issueForm.getSendEmails()), EmailType.ISSUE_SEND_2, issueMap, null);
        }else if(issueForm.getTemplate().equals(EmailType.ISSUE_SEND_3.toString())){
            this.systemEmailService.directEmail(ConvertUtil.ToArray(issueForm.getSendEmails()), EmailType.ISSUE_SEND_3, issueMap, null);
        }
    }
src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
@@ -97,7 +97,6 @@
                        locale = CommonUtil.getUserLanguage(loginUser.getLanguage());
                    }
                }
                this.makeDirectContextEmail(emailType, params, locale, new String[]{CommonUtil.decryptAES128(sendUser)});
            }
        }
@@ -179,19 +178,19 @@
                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
                break;
            case ISSUE_SEND_1:    //  이슈 이메일로 대상자에게 발송
            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:    //  이슈 이메일로 대상자에게 발송
            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:    //  이슈 이메일로 대상자에게 발송
            case ISSUE_SEND_3:    //  이슈 이메일 템플릿3로 대상자에게 발송
                mailConstants = MailConstants.ISSUE_SEND_3;
                context = StringTemplateUtil.makeContext(params, locale);
                content = this.springTemplateEngine.process(mailConstants.getMailTemplate(), context);
src/main/java/kr/wisestone/owl/util/ConvertUtil.java
@@ -549,4 +549,9 @@
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return mapper;
    }
    public static String[] ToArray(List<String> list) {
        return  list.toArray(new String[list.size()]);
    }
}
src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java
@@ -7,12 +7,9 @@
import java.util.List;
import java.util.Map;
public class CompanyFieldForm {
    private Long id;
    private String name;
public class CompanyFieldForm extends UsePartnerForm {
    private String manager;
    private String tel;
    private String email;
    private String memo;
    private List<Long> removeIds = Lists.newArrayList();
@@ -25,22 +22,6 @@
            form.setRemoveIds(MapUtil.getLongs(params, "removeIds"));
        }
        return form;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getManager() {
@@ -57,14 +38,6 @@
    public void setTel(String tel) {
        this.tel = tel;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getMemo() {
src/main/java/kr/wisestone/owl/web/form/HostingFieldForm.java
@@ -7,13 +7,10 @@
import java.util.List;
import java.util.Map;
public class HostingFieldForm {
    private Long id;
public class HostingFieldForm extends UsePartnerForm {
    private String code;
    private String name;
    private String manager;
    private String tel;
    private String email;
    private String memo;
    private List<Long> removeIds = Lists.newArrayList();
@@ -28,28 +25,12 @@
        return form;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getManager() {
@@ -66,14 +47,6 @@
    public void setTel(String tel) {
        this.tel = tel;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getMemo() {
src/main/java/kr/wisestone/owl/web/form/IspFieldForm.java
@@ -7,13 +7,10 @@
import java.util.List;
import java.util.Map;
public class IspFieldForm {
    private Long id;
public class IspFieldForm extends UsePartnerForm {
    private String code;
    private String name;
    private String manager;
    private String tel;
    private String email;
    private String memo;
    private List<Long> removeIds = Lists.newArrayList();
@@ -28,14 +25,6 @@
        return form;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
@@ -44,13 +33,6 @@
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getManager() {
        return manager;
@@ -66,14 +48,6 @@
    public void setTel(String tel) {
        this.tel = tel;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getMemo() {
src/main/java/kr/wisestone/owl/web/form/IssueForm.java
@@ -15,6 +15,8 @@
 * Created by wisestone on 2018-01-03.
 */
public class IssueForm {
    private Long id;
    private Long projectId;
    private Long issueStatusId;
src/main/java/kr/wisestone/owl/web/form/UsePartnerForm.java
New file
@@ -0,0 +1,56 @@
package kr.wisestone.owl.web.form;
import com.google.common.collect.Lists;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import java.util.List;
import java.util.Map;
public class UsePartnerForm {
    private Long id;
    private String name;
    private String email;
    private String emailTemplate;
    public UsePartnerForm() {
    }
    public static UsePartnerForm make(Map<String, Object> params) {
        UsePartnerForm form = ConvertUtil.convertMapToClass(params, UsePartnerForm.class);
        return form;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getEmailTemplate() {
        return emailTemplate;
    }
    public void setEmailTemplate(String emailTemplate) {
        this.emailTemplate = emailTemplate;
    }
}
src/main/resources/mails/issueSendEmailTemplate1.html
New file
@@ -0,0 +1,161 @@
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table align="center" style="width: 600px; margin:0 auto; background-color: #fff; box-shadow: 0px 20px 50px rgba(0,0,0,0.05);font-size: 14px; line-height: 1.43;font-family: &quot;맑은 고딕&quot;" xmlns:th="http://www.thymeleaf.org">
    <tr>
        <td style="background-color: #fff;">
            <a href="" th:href="${url}" target="_blank"><img alt="OWL ITS" src="http://wisestone.kr/owlsolution/logo-dark.png" style="padding: 20px 60px"></a>
        </td>
    </tr>
    <tr>
        <td style="background-color: #fff; padding: 40px 70px 0 70px; border-top: 1px solid rgba(0,0,0,0.05);">
            <h1 style="margin-top: 0px;color:#030962;">
                이슈 템플릿 1
            </h1>
        </td>
    </tr>
    <tr>
        <td style="background-color: #fff; padding: 20px 70px;color: #636363; font-size: 13px;">
            (<span style="color:#4B72FA;font-weight:bold;" th:utext="${projectKey}"></span>-<span style="color:#4B72FA;font-weight:bold;" th:utext="${issueNumber}"></span>)
            <span style="color:#000;" th:utext="${toUser}"></span>님이 이슈 확인을 요청했습니다.
        </td>
    </tr>
    <tr>
        <td style="padding: 0px 70px;font-size: 13px;">
            <table style="width:450px; background-color: #F4F4F4; margin: 20px 0px 40px;" align="center">
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueName')}">이슈 명</span>
                        </div>
                        <div style="font-weight:bold">
                            <a href="" th:href="${issueLink}" style="color:#4B72FA; text-decoration:underline;" target="_blank" th:utext="${title}"></a>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.content')}">내용</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${description}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueType')}">이슈 유형</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${issueTypeName}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueStatus')}">이슈 상태</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${issueStatusName}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.assignee')}">담당자</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${assignees}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.schedule')}">일정</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${period}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.priority')}">중요도</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${severityName}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.severity')}">우선순위</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${priorityName}"></div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.project')}">프로젝트</span>
                        </div>
                        <div style="font-weight:bold;">
                            <a href="" th:href="${projectLink}" style="color:#4B72FA; text-decoration:underline;" target="_blank" th:utext="${projectName}"></a>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.projectKey')}">프로젝트 키</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${projectKey}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.register')}">등록자</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${register}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.customField')}">사용자 정의 필드</span>
                        </div>
                        <div style="font-weight:bold;">
                            <table>
                                <th:block th:each="customField : ${customFields}">
                                    <tr>
                                        <td th:text="${customField.name}"></td>
                                        <td th:text="${customField.useValue}"></td>
                                    </tr>
                                </th:block>
                            </table>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.attachedFile')}">첨부파일</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${attachedFiles}"></div>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td style="text-align:center;padding-bottom:40px;">
            <span style="color: #000; font-weight:bold; font-size:16px;">OWL ITS TEAM</span><br/>
            <a href="" th:href="${url}" target="_blank" style="text-decoration: underline; color: #4B72FA;" th:utext="${url}">
                https://owlsolution.io</a><br/><br/>
            <span style="font-size:12px;color: #8D929D;">If you have any questions, contact us at <a href="mailto:supportowl@wisestone.kr" style="text-decoration: underline; color: #4B72FA;">supportowl@wisestone.kr</a></span>
        </td>
    </tr>
    <tr>
        <td style="background-color: #f1f4fd; padding: 30px; text-align: center;color: #A5A5A5; font-size: 12px; margin-bottom: 5px;">
            <span th:utext="${#messages.msg('common.common.sendMail')}">본 메일은 발신전용 메일입니다.</span><br/>
            <span style="color: #A5A5A5; font-size: 10px;">
            Copyright © WISESTONE CO., Ltd. All Rights Reserved.
          </span>
        </td>
    </tr>
</table>
</body>
</html>
src/main/resources/mails/issueSendEmailTemplate2.html
New file
@@ -0,0 +1,161 @@
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table align="center" style="width: 600px; margin:0 auto; background-color: #fff; box-shadow: 0px 20px 50px rgba(0,0,0,0.05);font-size: 14px; line-height: 1.43;font-family: &quot;맑은 고딕&quot;" xmlns:th="http://www.thymeleaf.org">
    <tr>
        <td style="background-color: #fff;">
            <a href="" th:href="${url}" target="_blank"><img alt="OWL ITS" src="http://wisestone.kr/owlsolution/logo-dark.png" style="padding: 20px 60px"></a>
        </td>
    </tr>
    <tr>
        <td style="background-color: #fff; padding: 40px 70px 0 70px; border-top: 1px solid rgba(0,0,0,0.05);">
            <h1 style="margin-top: 0px;color:#030962;">
                이슈 템플릿 2
            </h1>
        </td>
    </tr>
    <tr>
        <td style="background-color: #fff; padding: 20px 70px;color: #636363; font-size: 13px;">
            (<span style="color:#4B72FA;font-weight:bold;" th:utext="${projectKey}"></span>-<span style="color:#4B72FA;font-weight:bold;" th:utext="${issueNumber}"></span>)
            <span style="color:#000;" th:utext="${toUser}"></span>님이 이슈 확인을 요청했습니다.
        </td>
    </tr>
    <tr>
        <td style="padding: 0px 70px;font-size: 13px;">
            <table style="width:450px; background-color: #F4F4F4; margin: 20px 0px 40px;" align="center">
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueName')}">이슈 명</span>
                        </div>
                        <div style="font-weight:bold">
                            <a href="" th:href="${issueLink}" style="color:#4B72FA; text-decoration:underline;" target="_blank" th:utext="${title}"></a>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.content')}">내용</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${description}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueType')}">이슈 유형</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${issueTypeName}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueStatus')}">이슈 상태</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${issueStatusName}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.assignee')}">담당자</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${assignees}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.schedule')}">일정</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${period}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.priority')}">중요도</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${severityName}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.severity')}">우선순위</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${priorityName}"></div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.project')}">프로젝트</span>
                        </div>
                        <div style="font-weight:bold;">
                            <a href="" th:href="${projectLink}" style="color:#4B72FA; text-decoration:underline;" target="_blank" th:utext="${projectName}"></a>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.projectKey')}">프로젝트 키</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${projectKey}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.register')}">등록자</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${register}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.customField')}">사용자 정의 필드</span>
                        </div>
                        <div style="font-weight:bold;">
                            <table>
                                <th:block th:each="customField : ${customFields}">
                                    <tr>
                                        <td th:text="${customField.name}"></td>
                                        <td th:text="${customField.useValue}"></td>
                                    </tr>
                                </th:block>
                            </table>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.attachedFile')}">첨부파일</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${attachedFiles}"></div>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td style="text-align:center;padding-bottom:40px;">
            <span style="color: #000; font-weight:bold; font-size:16px;">OWL ITS TEAM</span><br/>
            <a href="" th:href="${url}" target="_blank" style="text-decoration: underline; color: #4B72FA;" th:utext="${url}">
                https://owlsolution.io</a><br/><br/>
            <span style="font-size:12px;color: #8D929D;">If you have any questions, contact us at <a href="mailto:supportowl@wisestone.kr" style="text-decoration: underline; color: #4B72FA;">supportowl@wisestone.kr</a></span>
        </td>
    </tr>
    <tr>
        <td style="background-color: #f1f4fd; padding: 30px; text-align: center;color: #A5A5A5; font-size: 12px; margin-bottom: 5px;">
            <span th:utext="${#messages.msg('common.common.sendMail')}">본 메일은 발신전용 메일입니다.</span><br/>
            <span style="color: #A5A5A5; font-size: 10px;">
            Copyright © WISESTONE CO., Ltd. All Rights Reserved.
          </span>
        </td>
    </tr>
</table>
</body>
</html>
src/main/resources/mails/issueSendEmailTemplate3.html
New file
@@ -0,0 +1,161 @@
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table align="center" style="width: 600px; margin:0 auto; background-color: #fff; box-shadow: 0px 20px 50px rgba(0,0,0,0.05);font-size: 14px; line-height: 1.43;font-family: &quot;맑은 고딕&quot;" xmlns:th="http://www.thymeleaf.org">
    <tr>
        <td style="background-color: #fff;">
            <a href="" th:href="${url}" target="_blank"><img alt="OWL ITS" src="http://wisestone.kr/owlsolution/logo-dark.png" style="padding: 20px 60px"></a>
        </td>
    </tr>
    <tr>
        <td style="background-color: #fff; padding: 40px 70px 0 70px; border-top: 1px solid rgba(0,0,0,0.05);">
            <h1 style="margin-top: 0px;color:#030962;">
                이슈 템플릿 3
            </h1>
        </td>
    </tr>
    <tr>
        <td style="background-color: #fff; padding: 20px 70px;color: #636363; font-size: 13px;">
            (<span style="color:#4B72FA;font-weight:bold;" th:utext="${projectKey}"></span>-<span style="color:#4B72FA;font-weight:bold;" th:utext="${issueNumber}"></span>)
            <span style="color:#000;" th:utext="${toUser}"></span>님이 이슈 확인을 요청했습니다.
        </td>
    </tr>
    <tr>
        <td style="padding: 0px 70px;font-size: 13px;">
            <table style="width:450px; background-color: #F4F4F4; margin: 20px 0px 40px;" align="center">
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueName')}">이슈 명</span>
                        </div>
                        <div style="font-weight:bold">
                            <a href="" th:href="${issueLink}" style="color:#4B72FA; text-decoration:underline;" target="_blank" th:utext="${title}"></a>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.content')}">내용</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${description}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueType')}">이슈 유형</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${issueTypeName}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.issueStatus')}">이슈 상태</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${issueStatusName}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.assignee')}">담당자</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${assignees}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.schedule')}">일정</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${period}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; width:50%">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.priority')}">중요도</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${severityName}"></div>
                    </td>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.severity')}">우선순위</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${priorityName}"></div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.project')}">프로젝트</span>
                        </div>
                        <div style="font-weight:bold;">
                            <a href="" th:href="${projectLink}" style="color:#4B72FA; text-decoration:underline;" target="_blank" th:utext="${projectName}"></a>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td colspan="2" style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none; border-right: none;">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.projectKey')}">프로젝트 키</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${projectKey}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.register')}">등록자</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${register}"></div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.customField')}">사용자 정의 필드</span>
                        </div>
                        <div style="font-weight:bold;">
                            <table>
                                <th:block th:each="customField : ${customFields}">
                                    <tr>
                                        <td th:text="${customField.name}"></td>
                                        <td th:text="${customField.useValue}"></td>
                                    </tr>
                                </th:block>
                            </table>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="padding: 20px 40px; color: #111; border: 1px solid #e7e7e7; border-left: none;border-right: none;" colspan="2">
                        <div style="color: #9a9a9a; font-size: 12px; font-weight:bold; margin-bottom: 3px;">
                            <span th:utext="${#messages.msg('issue.add.attachedFile')}">첨부파일</span>
                        </div>
                        <div style="font-weight:bold;" th:utext="${attachedFiles}"></div>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td style="text-align:center;padding-bottom:40px;">
            <span style="color: #000; font-weight:bold; font-size:16px;">OWL ITS TEAM</span><br/>
            <a href="" th:href="${url}" target="_blank" style="text-decoration: underline; color: #4B72FA;" th:utext="${url}">
                https://owlsolution.io</a><br/><br/>
            <span style="font-size:12px;color: #8D929D;">If you have any questions, contact us at <a href="mailto:supportowl@wisestone.kr" style="text-decoration: underline; color: #4B72FA;">supportowl@wisestone.kr</a></span>
        </td>
    </tr>
    <tr>
        <td style="background-color: #f1f4fd; padding: 30px; text-align: center;color: #A5A5A5; font-size: 12px; margin-bottom: 5px;">
            <span th:utext="${#messages.msg('common.common.sendMail')}">본 메일은 발신전용 메일입니다.</span><br/>
            <span style="color: #A5A5A5; font-size: 10px;">
            Copyright © WISESTONE CO., Ltd. All Rights Reserved.
          </span>
        </td>
    </tr>
</table>
</body>
</html>