" +
+ "" +
+
+ // 메인 컨테이너 (반응형)
+ "" +
+
+ // 헤더 섹션
"" +
- "" +
- "" +
+ "" +
+ "Sequence" +
+ "🔑 임시 비밀번호 발급" +
+ "계정 복구를 위한 임시 비밀번호를 발급했습니다 " +
+ " | " +
+ "" +
// 컨텐츠 섹션
"" +
- "| " +
- " 안녕하세요. 임시 비밀번호가 발급되었습니다. " +
- "아래의 임시 비밀번호로 로그인 후, 보안을 위해 마이페이지에서 비밀번호를 변경해주세요. " +
+ " | " +
- // 비밀번호 섹션
- "" +
+ // 안내 메시지
+ "" +
"" +
- "| " +
- " 임시 비밀번호 " +
- "" + temporaryPassword + " " +
+ " | " +
+ " " +
+ "안녕하세요," +
+ " " +
+ "" +
+ "요청하신 임시 비밀번호가 발급되었습니다. 아래의 임시 비밀번호로 로그인 후, 보안을 위해 마이페이지에서 비밀번호를 변경해주세요." +
+ " " +
" | " +
" " +
" " +
- // 경고 섹션
+ // 임시 비밀번호 섹션
"" +
"" +
- "" +
- "보안 알림 및 이용 안내" +
- "• 로그인 즉시 마이페이지에서 새로운 비밀번호로 변경하세요 " +
- "• 비밀번호를 타인과 공유하지 마세요 " +
- "• Sequence 로그인 페이지에 접속합니다 " +
- "• 이메일과 임시 비밀번호를 입력합니다 " +
- "• 로그인 후 마이페이지에서 비밀번호 변경을 완료합니다 " +
+ " | " +
+
+ // 비밀번호 라벨
+ "" +
+ "" +
+ "| " +
+ " 임시 비밀번호 " +
+ " | " +
+ " " +
+ " " +
+
+ // 비밀번호 표시
+ "" +
+ "" +
+ "| " +
+ " " +
+ temporaryPassword +
+ " " +
" | " +
" " +
" " +
+
+ " | " +
+ " " +
+ " " +
+
+ // 보안 안내 섹션
+ "" +
+ "" +
+ "" +
+ "보안 알림 및 이용 안내" +
+
+ // 안내사항 목록
+ "" +
+ "" +
+ "| " +
+ " • 로그인 즉시 마이페이지에서 새로운 비밀번호로 변경하세요 " +
+ " | " +
+ " " +
+ "" +
+ "| " +
+ " • 비밀번호를 타인과 공유하지 마세요 " +
+ " | " +
+ " " +
+ "" +
+ "| " +
+ " • Sequence 로그인 페이지에 접속합니다 " +
+ " | " +
+ " " +
+ "" +
+ "| " +
+ " • 이메일과 임시 비밀번호를 입력합니다 " +
+ " | " +
+ " " +
+ "" +
+ "| " +
+ " • 로그인 후 마이페이지에서 비밀번호 변경을 완료합니다 " +
+ " | " +
+ " " +
+ " " +
+
+ " | " +
+ " " +
+ " " +
+
"" +
"" +
// 구분선
"" +
"| " +
- "" +
+ "" +
" | " +
" " +
// 푸터 섹션
"" +
- "" +
- "Sequence" +
- "이 메시지는 발신 전용입니다. " +
+ " | " +
+ "Sequence" +
+ "이 메시지는 발신 전용입니다. " +
+ "Sequence © 2025 " +
" | " +
" " +
+
" " +
" | " +
" " +
@@ -148,4 +237,5 @@ private void sendPasswordResetEmail(String email, String temporaryPassword) {
throw new RuntimeException("이메일 발송 중 오류가 발생했습니다.",e);
}
}
+
}
diff --git a/sequence_member/src/main/java/sequence/sequence_member/project/service/ProjectInviteEmailService.java b/sequence_member/src/main/java/sequence/sequence_member/project/service/ProjectInviteEmailService.java
index e5f4625..10e51d9 100644
--- a/sequence_member/src/main/java/sequence/sequence_member/project/service/ProjectInviteEmailService.java
+++ b/sequence_member/src/main/java/sequence/sequence_member/project/service/ProjectInviteEmailService.java
@@ -10,8 +10,6 @@
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
-import sequence.sequence_member.global.exception.BaseException;
-import sequence.sequence_member.global.response.Code;
import sequence.sequence_member.member.entity.MemberEntity;
import sequence.sequence_member.project.entity.Project;
@@ -107,7 +105,7 @@ public void sendProjectUpdateEmail(Project project, List members,
}
}
- // 초대 이메일 HTML 템플릿
+ // 프로젝트 초대 이메일 HTML 템플릿 (반응형)
private String createInvitationHtmlContent(Project project, MemberEntity invitedMember) {
// Null 체크 및 기본값 설정
String nickname = invitedMember.getNickname() != null ? invitedMember.getNickname() : "회원";
@@ -120,107 +118,285 @@ private String createInvitationHtmlContent(Project project, MemberEntity invited
String startDate = project.getStartDate() != null ? project.getStartDate().toString() : "미정";
String endDate = project.getEndDate() != null ? project.getEndDate().toString() : "미정";
- return String.format("""
-
-
- 🎉 프로젝트 초대장
-
- 새로운 프로젝트에 초대되었습니다!
-
-
-
-
-
- 안녕하세요 %s님! 👋
-
-
-
- %s님이 회원님을 다음 프로젝트에 초대했습니다.
-
-
-
-
- 📋 %s
-
-
- 프로젝트명: %s
-
-
- 카테고리: %s
-
-
- 모집인원: %d명
-
-
- 프로젝트 기간: %s ~ %s
-
-
-
-
-
- 💡 안내:
- 프로젝트 초대 알림입니다. 참여를 원하시면 로그인하여 확인해주세요.
-
-
-
-
-
- 이 이메일은 자동으로 발송된 메일입니다.
- Sequence © 2025
-
-
- """,
- nickname, writerNickname, title, projectName, category, personnel,
- startDate, endDate
- );
+ return "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "Sequence 프로젝트 초대" +
+ "" +
+ "" +
+ "" +
+
+ // 외부 컨테이너
+ "" +
+ "" +
+ "" +
+
+ // 메인 컨테이너 (반응형)
+ "" +
+
+ // 헤더 섹션
+ "" +
+ "" +
+ "Sequence" +
+ "📋 프로젝트 초대 알림" +
+ "새로운 프로젝트 참여 요청이 있습니다 " +
+ " | " +
+ " " +
+
+ // 컨텐츠 섹션
+ "" +
+ "" +
+
+ // 인사말
+ "" +
+ "" +
+ "| " +
+ " " +
+ "안녕하세요 " + nickname + "님," +
+ " " +
+ " | " +
+ " " +
+ " " +
+
+ // 초대 메시지
+ "" +
+ "" +
+ "| " +
+ " " +
+ "" + writerNickname + "님이 회원님을 다음 프로젝트에 초대했습니다." +
+ " " +
+ " | " +
+ " " +
+ " " +
+
+ // 프로젝트 정보 섹션 (반응형 테이블)
+ "" +
+ "" +
+ "" +
+
+ // 프로젝트 제목
+ "" +
+ "" +
+ "" +
+ "" +
+ "📋 " + title +
+ "" +
+ " | " +
+ " " +
+ " " +
+
+ // 프로젝트 상세 정보 (모바일에서 세로 정렬)
+ "" +
+ "" +
+ "| " +
+ " " +
+ "프로젝트명: " + projectName +
+ " " +
+ " | " +
+ " " +
+ "" +
+ "| " +
+ " " +
+ "카테고리: " + category +
+ " " +
+ " | " +
+ " " +
+ "" +
+ "| " +
+ " " +
+ "모집인원: " + personnel + "명" +
+ " " +
+ " | " +
+ " " +
+ "" +
+ "| " +
+ " " +
+ "프로젝트 기간: " + startDate + " ~ " + endDate +
+ " " +
+ " | " +
+ " " +
+ " " +
+
+ " | " +
+ " " +
+ " " +
+
+ // 안내 섹션
+ "" +
+ "" +
+ "" +
+ "💡 안내사항" +
+ "• 프로젝트 참여 초대 안내 " +
+ "• 참여 의사를 결정하시려면 로그인 후 확인해주세요 " +
+ "• 추가 문의사항은 프로젝트 관리자에게 연락해주세요 " +
+ " | " +
+ " " +
+ " " +
+
+ " | " +
+ " " +
+
+ // 구분선
+ "" +
+ "| " +
+ "" +
+ " | " +
+ " " +
+
+ // 푸터 섹션
+ "" +
+ "" +
+ "Sequence" +
+ "이 메시지는 발신 전용입니다. " +
+ "Sequence © 2025 " +
+ " | " +
+ " " +
+
+ " " +
+ " | " +
+ " " +
+ " " +
+ "" +
+ "";
}
- // 프로젝트 수정 알림 이메일 HTML 템플릿
+ // 프로젝트 수정 알림 이메일 HTML 템플릿 (반응형)
private String createUpdateHtmlContent(Project project, MemberEntity member, String updateDetails) {
String nickname = member.getNickname() != null ? member.getNickname() : "회원";
String projectName = project.getProjectName() != null ? project.getProjectName() : "프로젝트";
String details = updateDetails != null && !updateDetails.isEmpty() ? updateDetails : "프로젝트 정보가 변경되었습니다.";
- return String.format("""
-
-
- 📝 프로젝트 정보 변경
-
- 프로젝트 정보가 업데이트되었습니다!
-
-
-
-
-
- 안녕하세요 %s님! 👋
-
-
-
- 참여 중인 %s 프로젝트의 정보가 변경되었습니다.
-
-
-
-
-
-
- 💡 안내:
- 프로젝트 변경 알림입니다. 자세한 내용은 로그인하여 확인해주세요.
-
-
-
-
-
- 이 이메일은 자동으로 발송된 메일입니다.
- Sequence © 2025
-
-
- """,
- nickname, projectName, details
- );
+ return "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "Sequence 프로젝트 정보 변경" +
+ "" +
+ "" +
+ "" +
+
+ // 외부 컨테이너
+ "" +
+ "" +
+ "" +
+
+ // 메인 컨테이너 (반응형)
+ "" +
+
+ // 헤더 섹션
+ "" +
+ "" +
+ "Sequence" +
+ "📝 프로젝트 정보 업데이트" +
+ "참여 중인 프로젝트의 정보가 변경되었습니다 " +
+ " | " +
+ " " +
+
+ // 컨텐츠 섹션
+ "" +
+ "" +
+
+ // 인사말
+ "" +
+ "" +
+ "| " +
+ " " +
+ "안녕하세요 " + nickname + "님," +
+ " " +
+ " | " +
+ " " +
+ " " +
+
+ // 업데이트 메시지
+ "" +
+ "" +
+ "| " +
+ " " +
+ "참여 중인 " + projectName + " 프로젝트의 정보가 변경되었습니다." +
+ " " +
+ " | " +
+ " " +
+ " " +
+
+ // 변경 내용 섹션
+ "" +
+ "" +
+ "" +
+ "변경 내용" +
+ "" +
+ details +
+ " " +
+ " | " +
+ " " +
+ " " +
+
+ // 안내 섹션
+ "" +
+ "" +
+ "" +
+ "💡 안내사항" +
+ "• 프로젝트 정보 변경 알림 " +
+ "• 상세 내용은 로그인하여 프로젝트 페이지에서 확인 가능합니다 " +
+ "• 변경사항에 대한 문의는 프로젝트 관리자에게 연락해주세요 " +
+ " | " +
+ " " +
+ " " +
+
+ " | " +
+ " " +
+
+ // 구분선
+ "" +
+ "| " +
+ "" +
+ " | " +
+ " " +
+
+ // 푸터 섹션
+ "" +
+ "" +
+ "Sequence" +
+ "이 메시지는 발신 전용입니다. " +
+ "Sequence © 2025 " +
+ " | " +
+ " " +
+
+ " " +
+ " | " +
+ " " +
+ " " +
+ "" +
+ "";
}
}
From 1c27a272c241a0a1a2280a60be00f0c2e2d91665 Mon Sep 17 00:00:00 2001
From: Minji6 <105301353+Minji6@users.noreply.github.com>
Date: Mon, 30 Jun 2025 21:56:46 +0900
Subject: [PATCH 6/6] Update FindPasswordService.java
---
.../sequence_member/member/service/FindPasswordService.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sequence_member/src/main/java/sequence/sequence_member/member/service/FindPasswordService.java b/sequence_member/src/main/java/sequence/sequence_member/member/service/FindPasswordService.java
index dd3247d..d88fe75 100644
--- a/sequence_member/src/main/java/sequence/sequence_member/member/service/FindPasswordService.java
+++ b/sequence_member/src/main/java/sequence/sequence_member/member/service/FindPasswordService.java
@@ -237,5 +237,5 @@ private void sendPasswordResetEmail(String email, String temporaryPassword) {
throw new RuntimeException("이메일 발송 중 오류가 발생했습니다.",e);
}
}
-
+
}
| |