Spring Boot | 메일 발송 기능 구현하기 (Gmail)

최웅진·2023년 7월 21일
0

Spring

목록 보기
5/5
post-thumbnail

개요


부트캠프 진행 중 SpringBoot email을 알아보던중에 시간이 조금 지나 프로젝트를 진행할 때 회원에게 메일을 발송하는 기능을 구현해보고 싶다는 생각이들었다.
회원가입 시 이메일 인증을 하고, 비밀번호를 분실했을 때 인증을 코드를 발송하는 기능등 다양하게 사용되기 때문에 아직은 미래지만 실제로 회사에서 일하게 된다면 유저에게 직접적으로 도움을 줄 수 있는 기능이기 때문에 관심이 갔다.

이번에 알아 볼것은 Gmail의 SMTP 서버를 활용하여 이메일을 발송하는 방법이다.

SpringBoot Email이란?

Spring Boot는 스프링 프레임워크를 기반으로한 개발을 더욱 쉽게하고 빠르게 만들어주는 도구이며, 이를 사용하여 이메일(Email)을 보내는 기능을 구현할 수 있다.
스프링 부트를 이용하여 이메일을 보내려면 다음과 같은 단계를 따를 수 있습니다.

  1. 의존성 설정: 스프링 부트는 자체적으로 이메일을 보내는 데 필요한 의존성을 제공합니다. 이를 위해 spring-boot-starter-mail 의존성을 프로젝트에 추가한다.
    이렇게 하면 이메일을 보내기 위한 필수적인 라이브러리와 설정들이 자동으로 추가된다.
  2. 이메일 설정: application.properties 또는 application.yml 파일을 사용하여 이메일 관련 설정을 정의합니다.
    이 설정에는 이메일 호스트, 포트, 보내는 사람의 정보 등이 포함될 수 있다.

개발 환경

  • Spring Boot
  • Java 17
  • IntelliJ

구글 계정 설정


Gmail의 SMTP 서버를 활용하기 위한 절차가 필요하다.

  1. 구글 계정 관리에 들어가서 보안 탭을 클릭한다.

  2. 2단계 인증을 설정하지 않았다면 사용하는 것으로 설정을 변경한다.

  3. 아래 이미지를 참고하여 앱 비밀번호를 설정한다.


  1. 앱 선택 목록에서 메일을 선택

  2. 기기 선택 목록에서 기타를 선택한 후 기기 이름을 입력(원하는대로 작성 하시면됩니다).

  3. 생성 버튼을 눌러 앱 비밀번호를 생성한다.

  1. 16자리의 앱 비밀번호를 확인합니다. 앱 비밀번호는 노출되지 않도록 주의하고, 개인 공간에 복사해둔다.

  2. 확인버튼을 눌러 완료!

            

구글 메일 설정


  1. Gmail 설정에 들어가서 전달 및 POP/IMAP 탭으로 들어가기!

  2. 모든 메일에 POP를 활성화 하기를 선택!

  3. IMAP 사용을 선택!

  4. 변경사항을 저장!

    	

의존성 & yml 파일 설정


build.gradle 수정

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'
...
}

application.yml 수정

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
  1. SMTP 서버 호스트

  2. SMTP 서버 포트

  3. SMTP 서버 로그인 아이디: 발신자 (이메일이 test@gmail.com 이면 test가 해당)

  4. SMTP 서버 로그인 패스워드: 앱 비밀번호

  5. 사용자 인증 시도 여부 (기본값 : false)

  6. Socket Read Timeout 시간(ms) (기본값 : 무한대)

  7. StartTLS 활성화 여부 (기본값 : false)

profile
PlayData

0개의 댓글