Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package org.example.wowelang_backend.report.service;

import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import org.example.wowelang_backend.report.domain.Report;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

@Service
Expand All @@ -13,28 +15,51 @@ public class ReportMailService {
private final JavaMailSender mailSender;

public void sendReportNotification(Report report) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo("wowelang0216@gmail.com"); // 받을 이메일
message.setSubject("[신고 접수] 새로운 신고가 접수되었습니다.");
message.setText(buildContent(report));
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, false, "UTF-8");

mailSender.send(message);
helper.setTo("wowelang0216@gmail.com");
helper.setSubject("[신고 접수] 새로운 신고가 접수되었습니다.");
helper.setText(buildHtmlContent(report), true); // true → HTML 모드

mailSender.send(message);
} catch (MessagingException e) {
throw new RuntimeException("신고 메일 전송 실패", e);
}
}

private String buildContent(Report report) {
return String.format(
"""
신고자: %s
피신고자: %s
신고 사유: %s
상세 내용: %s
신고 발원지: %s
private String buildHtmlContent(Report report) {
return String.format("""
<div style="font-family: Arial, sans-serif; line-height: 1.6;">
<h2 style="color: #d9534f;">🚨 신고 접수 알림</h2>
<p><strong>신고자:</strong> %s</p>
<p><strong>피신고자:</strong> %s</p>
<p><strong>신고 사유:</strong> %s</p>
<p><strong>상세 내용:</strong></p>
<div style="background: #f8f9fa; padding: 10px; border-radius: 4px; border: 1px solid #ddd;">
%s
</div>
<p><strong>신고 발원지:</strong> %s</p>
<hr>
<p style="font-size: 12px; color: #888;">WowELang 관리자 시스템에서 자동 발송된 메일입니다.</p>
</div>
""",
report.getReportingUser().getName(),
report.getReportedUser().getName(),
report.getReportCategory().getReportCategoryName(),
report.getReportReason(),
report.getReportTarget()
report.getReportingUser().getName(),
report.getReportedUser().getName(),
report.getReportCategory().getReportCategoryName(),
escapeHtml(report.getReportReason()),
report.getReportTarget()
);
}
}

// HTML 이스케이프 유틸 (간단 버전)
private String escapeHtml(String input) {
if (input == null) return "";
return input.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace("\"", "&quot;")
.replace("'", "&#39;");
}
}
Loading