부트캠프 진행 중 SpringBoot email을 알아보던중에 시간이 조금 지나 프로젝트를 진행할 때 회원에게 메일을 발송하는 기능을 구현해보고 싶다는 생각이들었다.
회원가입 시 이메일 인증을 하고, 비밀번호를 분실했을 때 인증을 코드를 발송하는 기능등 다양하게 사용되기 때문에 아직은 미래지만 실제로 회사에서 일하게 된다면 유저에게 직접적으로 도움을 줄 수 있는 기능이기 때문에 관심이 갔다.
이번에 알아 볼것은 Gmail의 SMTP 서버를 활용하여 이메일을 발송하는 방법이다.
Spring Boot는 스프링 프레임워크를 기반으로한 개발을 더욱 쉽게하고 빠르게 만들어주는 도구이며, 이를 사용하여 이메일(Email)을 보내는 기능을 구현할 수 있다.
스프링 부트를 이용하여 이메일을 보내려면 다음과 같은 단계를 따를 수 있습니다.
spring-boot-starter-mail
의존성을 프로젝트에 추가한다.application.properties
또는 application.yml
파일을 사용하여 이메일 관련 설정을 정의합니다.Gmail의 SMTP 서버를 활용하기 위한 절차가 필요하다.
구글 계정 관리에 들어가서 보안 탭을 클릭한다.
2단계 인증을 설정하지 않았다면 사용하는 것으로 설정을 변경한다.
아래 이미지를 참고하여 앱 비밀번호를 설정한다.
앱 선택 목록에서 메일을 선택
기기 선택 목록에서 기타를 선택한 후 기기 이름을 입력(원하는대로 작성 하시면됩니다).
생성 버튼을 눌러 앱 비밀번호를 생성한다.
16자리의 앱 비밀번호를 확인합니다. 앱 비밀번호는 노출되지 않도록 주의하고, 개인 공간에 복사해둔다.
확인버튼을 눌러 완료!
Gmail 설정에 들어가서 전달 및 POP/IMAP 탭으로 들어가기!
모든 메일에 POP를 활성화 하기를 선택!
IMAP 사용을 선택!
변경사항을 저장!
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-mail'
// 아래 2개는 thymeleaf를 사용하는 경우에만 추가
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
...
}
spring:
mail:
host: smtp.gmail.com # 1
port: 587 # 2
username: ${mail.username} # 3
password: ${mail.password} # 4
properties:
mail:
smtp:
auth: true # 5
timeout: 5000 # 6
starttls:
enable: true # 7
SMTP 서버 호스트
SMTP 서버 포트
SMTP 서버 로그인 아이디: 발신자 (이메일이 test@gmail.com 이면 test가 해당)
SMTP 서버 로그인 패스워드: 앱 비밀번호
사용자 인증 시도 여부 (기본값 : false)
Socket Read Timeout 시간(ms) (기본값 : 무한대)
StartTLS 활성화 여부 (기본값 : false)