11package com .back .domain .user .service ;
22
3+ import jakarta .mail .MessagingException ;
4+ import jakarta .mail .internet .MimeMessage ;
35import lombok .RequiredArgsConstructor ;
46import org .springframework .beans .factory .annotation .Value ;
57import org .springframework .mail .SimpleMailMessage ;
68import org .springframework .mail .javamail .JavaMailSender ;
9+ import org .springframework .mail .javamail .MimeMessageHelper ;
710import org .springframework .stereotype .Service ;
811
12+
913@ Service
1014@ RequiredArgsConstructor
1115public class EmailService {
@@ -21,25 +25,35 @@ public void sendVerificationEmail(String toEmail, String token) {
2125 String subject = "[Catfe] 이메일 인증 안내" ;
2226 String verificationUrl = FRONTEND_BASE_URL + "/verify-email?token=" + token ;
2327
24- String text = """
25- 안녕하세요, Catfe에 가입해 주셔서 감사합니다.
26-
27- 아래 링크를 클릭하여 이메일 인증을 완료해주세요:
28- %s
29-
30- 이 링크는 24시간 동안만 유효합니다.
28+ String htmlContent = """
29+ <p>안녕하세요, Catfe에 가입해 주셔서 감사합니다.</p>
30+ <p>아래 버튼을 클릭하여 이메일 인증을 완료해주세요.</p>
31+ <br>
32+ <p>
33+ <a href="%s" style="display:inline-block;padding:10px 20px;
34+ background-color:#4CAF50;color:#fff;text-decoration:none;
35+ border-radius:5px;">이메일 인증하기</a>
36+ </p>
37+ <br>
38+ <p>이 링크는 24시간 동안만 유효합니다.</p>
3139 """ .formatted (verificationUrl );
3240
33- sendEmail (toEmail , subject , text );
41+ sendHtmlEmail (toEmail , subject , htmlContent );
3442 }
3543
36- private void sendEmail (String toEmail , String subject , String text ) {
37- SimpleMailMessage message = new SimpleMailMessage ();
38- message .setFrom (FROM_ADDRESS );
39- message .setTo (toEmail );
40- message .setSubject (subject );
41- message .setText (text );
44+ private void sendHtmlEmail (String toEmail , String subject , String htmlContent ) {
45+ try {
46+ MimeMessage message = mailSender .createMimeMessage ();
47+ MimeMessageHelper helper = new MimeMessageHelper (message , true , "UTF-8" );
48+
49+ helper .setFrom (FROM_ADDRESS );
50+ helper .setTo (toEmail );
51+ helper .setSubject (subject );
52+ helper .setText (htmlContent , true ); // true → HTML 모드
4253
43- mailSender .send (message );
54+ mailSender .send (message );
55+ } catch (MessagingException e ) {
56+ throw new RuntimeException ("이메일 전송 실패" , e );
57+ }
4458 }
45- }
59+ }
0 commit comments