Skip to content

Commit

Permalink
#42 - Refactor: MailConfig 클래스에서 JavaMailSender 객체 빈으로 관리(설정값은 yml에서 관리)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahah525 committed Nov 18, 2022
1 parent 15f590f commit 85f3084
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 51 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.example.mutbooks.app.mail;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

/**
* JavaMailSender 메일발송을 위한 MailConfig 설정 참고
* @See <a href="https://gist.github.com/ihoneymon/56dd964336322eea04dc">참고1</a>
* @See <a href="https://velog.io/@coffiter/SpringBoot-%EB%A9%94%EC%9D%BC-%EB%B0%9C%EC%86%A1JavaMailSender">참고2</a>
*/
@Configuration
public class MailConfig {
private static final String MAIL_SMTP_AUTH = "mail.smtp.auth";
private static final String MAIL_SMTP_STARTTLS_ENABLE = "mail.smtp.starttls.enable";

@Value("${spring.mail.properties.mail.smtp.auth}")
private boolean auth;

@Value("${spring.mail.properties.mail.smtp.starttls.enable}")
private boolean starttls;

@Value("${spring.mail.protocol}")
private String protocol;

@Value("${spring.mail.host}")
private String host; // smtp 서버

@Value("${spring.mail.port}")
private int port; // 포트번호

@Value("${spring.mail.username}")
private String username; // 계정

@Value("${spring.mail.password}")
private String password; // 비밀번호

@Value("${spring.mail.default-encoding}")
private String defaultEncoding;

@Bean
public JavaMailSender javaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
Properties properties = mailSender.getJavaMailProperties();
properties.put(MAIL_SMTP_AUTH, auth);
properties.put(MAIL_SMTP_STARTTLS_ENABLE, starttls);
mailSender.setJavaMailProperties(properties);

mailSender.setProtocol(protocol);
mailSender.setHost(host);
mailSender.setPort(port);
mailSender.setUsername(username);
mailSender.setPassword(password);
mailSender.setDefaultEncoding(defaultEncoding);

return mailSender;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,71 +5,44 @@
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

@Service
@RequiredArgsConstructor
public class MailService {
private final JavaMailSender javaMailSender;

public void sendJoinCongrats(String username, String email) {
// 수신 대상을 담을 ArrayList 생성
ArrayList<String> toUserList = new ArrayList<>();

// 수신 대상 추가
toUserList.add(email);

// 수신 대상 개수
int toUserSize = toUserList.size();

// SimpleMailMessage (단순 텍스트 구성 메일 메시지 생성할 때 이용)
SimpleMailMessage simpleMessage = new SimpleMailMessage();

// 수신자 설정
simpleMessage.setTo((String[]) toUserList.toArray(new String[toUserSize]));

// 메일 제목
String title = "[MUTBooks] %s 회원님 환영합니다.".formatted(username);
simpleMessage.setSubject(title);
/**
* 메일 발송
* @param to 수신자(email)
* @param subject 메일 제목
* @param text 메일 내용
*/
public void send(String to, String subject, String text) {
// 단순 텍스트 구성 메일 메시지 생성
SimpleMailMessage message = new SimpleMailMessage();
// message.setFrom(""); from 값을 설정하지 않으면 application-base-addi.yml 의 spring.mail.username 값이 설정된다.
message.setTo(to);
message.setSubject(subject);
message.setText(text);

javaMailSender.send(message); // 메일 발송
}

// 메일 내용
String content = """
public void sendJoinCongrats(String username, String to) {
String subject = "[MUTBooks] %s 회원님 환영합니다.".formatted(username);
String text = """
%S 님의 MUTBooks 가입을 축하합니다.
""".formatted(username);
simpleMessage.setText(content);

// 메일 발송
javaMailSender.send(simpleMessage);
send(to, subject, text);
}

// 임시 비밀번호 발급 메일 전송
public void sendTempPassword(String username, String email, String tempPwd) {
// 수신 대상을 담을 ArrayList 생성
ArrayList<String> toUserList = new ArrayList<>();

// 수신 대상 추가
toUserList.add(email);

// 수신 대상 개수
int toUserSize = toUserList.size();

// SimpleMailMessage (단순 텍스트 구성 메일 메시지 생성할 때 이용)
SimpleMailMessage simpleMessage = new SimpleMailMessage();

// 수신자 설정
simpleMessage.setTo((String[]) toUserList.toArray(new String[toUserSize]));

// 메일 제목
String title = "[MUTBooks] 회원님의 임시 비밀번호입니다.";
simpleMessage.setSubject(title);

// 메일 내용
String content = """
public void sendTempPassword(String username, String to, String tempPwd) {
String subject = "[MUTBooks] 회원님의 임시 비밀번호입니다.";
String text = """
%S 님의 임시 비밀번호는 %s 입니다.
""".formatted(username, tempPwd);
simpleMessage.setText(content);

// 메일 발송
javaMailSender.send(simpleMessage);
send(to, subject, text);
}
}

0 comments on commit 85f3084

Please sign in to comment.