동네 불편사항을 공유하는 커뮤니티 서비스를 만들고있다!
여기서 "해결됐어요" 기능은 불편사항이 해결됐는지 다른 사람들과 공유할 수 있도록 하는 "좋아요 기능"이다.
게시글에 "해결됐어요"가 5개에 도달하면 해당 게시글은 "해결 완료" 처리가 되면서 게시글 작성자에게 이메일로 처리됐음을 알려주는 메일을 보내야한다.
네이버 메일을 사용해서 메일 보내기를 구현하기로 하였다.
@Value("${email.secret.id}")
private String id;
@Value("${email.secret.pw}")
private String password;
먼저 발신 계정이 있어야 하기 때문에 application.properties
에 추가해주었다.
[네이버 메일 > 환경설정 > 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
클래스를 사용해 속성을 설정을 하였다.
따로 .html
파일을 만들었다.
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);
}