[TIL] 230829 "해결됐어요" 일정 개수 도달하면 이메일 알림 보내기

CountryGirl·2023년 8월 29일
0

TIL

목록 보기
52/80

동네 불편사항을 공유하는 커뮤니티 서비스를 만들고있다!

여기서 "해결됐어요" 기능은 불편사항이 해결됐는지 다른 사람들과 공유할 수 있도록 하는 "좋아요 기능"이다.

게시글에 "해결됐어요"가 5개에 도달하면 해당 게시글은 "해결 완료" 처리가 되면서 게시글 작성자에게 이메일로 처리됐음을 알려주는 메일을 보내야한다.

네이버 메일을 사용해서 메일 보내기를 구현하기로 하였다.

✉️ 메일 보내기

1️⃣ 발신 계정 정보 추가하기

@Value("${email.secret.id}")
private String id;
@Value("${email.secret.pw}")
private String password;

먼저 발신 계정이 있어야 하기 때문에 application.properties 에 추가해주었다.

2️⃣ 발신 계정 속성 설정하기

[네이버 메일 > 환경설정 > POP3/IMAP 설정]에서 정보를 확인할 수 있다.

public Properties getMailProperties() {
    Properties properties = new Properties();
    properties.setProperty("mail.transport.protocol", "smtp");
    properties.setProperty("mail.smtp.auth", "true");
    properties.setProperty("mail.smtp.starttls.enable", "true");
    properties.setProperty("mail.debug", "false");
    properties.setProperty("mail.smtp.ssl.trust", "smtp.naver.com");
    properties.setProperty("mail.smtp.ssl.enable", "true");
    return properties;
}

Properties 클래스를 사용해 속성을 설정을 하였다.

3️⃣ 보낼 메일 template 만들기 (HTML)

따로 .html 파일을 만들었다.


4️⃣ 메일 보내는 메서드 만들기

JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("smtp.naver.com");
javaMailSender.setUsername(id);
javaMailSender.setPassword(password);
javaMailSender.setPort(465);
javaMailSender.setJavaMailProperties(getMailProperties());

javaMailSender 에 발신 계정 속성을 넣어주었다.

MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, "UTF-8");

MimeMessage: JavaMail 라이브러리에서 사용되는 이메일 메시지의 표현 ➡️ 이메일 내용 및 헤더 정보 포함
MimeMessageHelper: 편리하게 .html 파일과 같은 이메일 컨텐츠를 설정하기 위해서

InputStream inputStream = getClass()
                    .getResourceAsStream("/templates/sendDoneEmailTemplate.html");

InputStream 을 사용하여 .html 파일을 읽어올 수 있도록 하였다.

messageHelper.setFrom(id);								// 발신
messageHelper.setTo(user.getEmail()); 					// 수신
messageHelper.setSubject(donePostNotificationTitle);	// 메일 제목

전체코드

public void sendDoneEmail(User user, Post post) {
    JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
    javaMailSender.setHost("smtp.naver.com");
    javaMailSender.setUsername(id);
    javaMailSender.setPassword(password);
    javaMailSender.setPort(465);
    javaMailSender.setJavaMailProperties(getMailProperties());

    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper messageHelper = new MimeMessageHelper(message, "UTF-8");
    try {
        InputStream inputStream = getClass()
                .getResourceAsStream("/templates/sendDoneEmailTemplate.html");
        Scanner scanner = new Scanner(inputStream).useDelimiter("\\A");
        String template = scanner.hasNext() ? scanner.next() : "";

        String messageContent = template.replace("{username}", user.getNickname())
                .replace("{postTitle}", post.getTitle());

        messageHelper.setFrom(id);
        messageHelper.setTo(user.getEmail());
        messageHelper.setSubject(donePostNotificationTitle);

        messageHelper.setText(messageContent, true);
    } catch (Exception e) {
        e.printStackTrace();
    }
    javaMailSender.send(message);
}
profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글