예제소스는 깃허브에 있습니다.
1. 이메일을 보내는 Gmail 의 2단계 인증 진행
구글 계정의 보안 설정 접속 후 2단계 인증 진행
https://myaccount.google.com/u/2/security
2단계 인증이 완료되면 아래와 같이 설정했다는 안내가 나온다.
2. 앱 비밀번호 설정
앱설정 -> 메일
기타 설정 -> 기타(맞춤 이름) 입력
적절히 앱 이름을 입력하고 생성을 누르면 아래와 같이 비밀번호가 제공된다.
3. 스프링 부트 설정
스프링 부트에 이메일 모듈을 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-mail'
application.yml 에 Gmail smtp 설정을 추가한다. 이때 username, password 에는 이메일과 앱 비밀번호가 들어가는데 보안을 위해서 환경변수로 입력받게 하고, 코드상에서 노출을 하지 않도록 한다.
spring:
mail:
host: smtp.gmail.com
port: 587
username: ${MAIL_USERNAME}
password: ${MAIL_PASSWORD}
properties:
mail:
smtp:
socketFactory.class: javax.net.ssl.SSLSocketFactory
auth: true
starttls:
enable: true
인텔리제이의 Run Configuration 에서 환경변수를 아래와 같이 입력할 수 있다.
MAIL_USERNAME={email};MAIL_PASSWORD={pw}
설정까지 추가하면 스프링 구동 시에 JavaMailSender 라는 빈이 올라오게 된다.
@ConditionalOnMissingBean(JavaMailSender.class) 의 뜻은 JavaMailSender 클래스의 빈이 따로 없다면 mailSender 메서드로 빈을 띄우겠다는 뜻이다. 코드 내에 따로 JavaMailSender 를 빈으로 만든적이 없으니 기본으로 JavaMailSenderImpl 이 빈이 된다.
MailSenderPropertiesConfiguration.java
4. JavaMailSender 코드 작성
메일은 보내는 코드 JavaMailSender 의 send 에 preprator 를 넘겨주면 된다.
(여러 방식이 있지만 preprator 넘기는게 가장 편한 것 같다.)
setText 에는 html 인지 불린값을 추가로 넣을 수 있는데, 넣게 되면 html 형식으로 메일을 보낼 수 있다.
@SpringBootApplication
class SpringMailApplication {
@Bean
fun init(mailSender: JavaMailSender) = CommandLineRunner {
val preparator = MimeMessagePreparator { message: MimeMessage? ->
val helper = MimeMessageHelper(message!!)
helper.setTo("보낼 대상의 이메일 입력")
helper.setSubject("제목입니당.")
helper.setText("내용입니당.")
}
mailSender.send(preparator)
}
}
fun main(args: Array<String>) {
runApplication<SpringMailApplication>(*args)
}
실행해보면 이메일 발송이 잘 된다.
'스프링' 카테고리의 다른 글
JPA 정답이 없는 고난이도 면접질문 (1) | 2023.11.30 |
---|---|
JPA 관련 인터뷰 면접 질문 30가지 (심화 - 2) (0) | 2023.05.04 |
스프링에서 다중 데이터소스 사용하기 (0) | 2021.08.09 |
댓글