본문 바로가기
spring & boot/Spring & Spring Boot

[springBoot] spring Boot 이메일 발송(Google SMTP)

by lucas_owner 2022. 12. 14.

Spring Boot 이메일 발송하기! 

웹 서비스를 기획하고 구성하다보면 이메일 관련한 작업을 해야 할 경우가 발생한다.

예를들면 우리가 많이 접하는 '회원가입시 이메일인증', '각종 알림을 위한 이메일 전송' 등 이 존재한다.

다양한 라이브러리가 이미 존재하기 때문에 우리는 선택을 해야한다. 

 

1. 라이브러리를 사용해서 이메일을 발송할 것 인지? 

2. 라이브러리를 사용하지 않고 코드만으로 작성 할 것인지!

 

이 글에서는 라이브러리를 사용하여 구글이메일 발송을 해볼 것이다. 

JavaMailSender 를 사용 할 것이며 2가지 방법을 소개할 예정이다. 

* 2022.05.30일 부터 Google 약관이 변경되어 2단계 인증 (앱 비밀번호 사용)을 해야 사용가능.

 

-현재 개발 환경에서 이메일 발송 로직

1. Front 에서 "제목, 내용, 상대방 이메일주소" 를 Server로 전달

2. 내부 로직에 따라 DB data 관련 저장 

3. 2번 작업 종료 후 이메일 발송.


JavaMailSender 이메일 발송 방식

* 이부분이 중요하다. 

중요하다고 생각한 이유는. 'Spring Email 발송' 등으로 구글링을 하게되면 사용하는 메서드가 전부 다르다.. 

검색을 좀 더 하고 자료를 취합해보면 "아~ 이건 이럴때 사용 하는구나~" 하지만 간단하게 정리를 해보자면

 

1. SimpleMailMessage 를 사용하는 방법

   - 이방법은 이름처럼 간단하게 전송하는 방법이다.

2. MimeMessage 

    - Multipurpose Internet Mail Extensions 의 약자이며

    - html 으로 작성된 것들을 전송하거나, 파일을 전송 할 때 사용한다. 


개발환경

- IntelliJ Ultimate 

- Java 11

- Spring Boot 2.7.2

- Gradle


Back-End 부분을 하기전에 준비!

1. 우선 Google 이메일 계정을 사용하여 발송하기 때문에 Google 계정이 필요하다!

- 소개글에서 말했듯 앱 비밀번호 설정이 필요하다. 

Google 계정관리 -> 보안 

* 발급 받은 앱 비밀번호를 필수로 저장 해두자! 추후 사용! 

 


Spring Email 서비스 구축

 

1. build.gradle에 dependencies 를 추가한다. 

implementation 'org.springframework.boot:spring-boot-starter-mail' // Email

 

2. application.properties에 email 관련 설정한다.

* 패스워드나 유저네임은 공개된 Github에 올리지 않는걸 추천합니다(보안)

- 설정 설명 순서대로

  1. SMTP 서버 호스트 (Google)
  2. SMTP 서버 포트 (Google 경우 587 사용)
  3. SMTP 서버 로그인 아이디 (풀주소 사용 가능! Ex. Test@google.com)
  4. SMTP 서버 로그인 패스워드 - 발급받은 앱 비밀번호!
  5. SMTP Debug - 메일 전송시 상황, 로그를 확인 하는것.
  6. TimeOut 제한
  7. starttls 설정 = true --> SSL/TLS 기반의 SMTPS 기능 즉 보안기능 활성화
  8. 위와 동일

 

3. Mail Service 작성

- 해당 프로젝트의 경우 전역에서 사용 되어야 하기 때문에 공동 패키지로 따로 빼두었다.

 

3-1 SimpleMailMessage

- 코드를 보면 어느정도 이해가 될것이다. 필요한 값 셋팅 후 javaMailSender.send(); 를 통해 전송한다.

 

1. setTo - 상대방 이메일 주소

2. setSubJect - 제목

3. setFrom - 프로퍼티즈에서 공통으로 설정 해주었지만, 확실하게 한번더 해주었다.

4. setText - 내용 

 

3-2  MIME 타입 전송

- MIME 타입 전송 방법이고 추가 설정을 통해 파일 전송도 가능하다. 

 

4. 발송 확인

 

- 수많은 로그와 함께 전송이 완료된다. 해당 로그에는 이메일 발송하는 과정의 로그들이 출력된다. 

-프론트 메세지

- 상대방 메일함


정리 

1. Spring(Boot) 에서는 Mail을 전송하게 해주는 라이브러리가 존재한다.

2. 간단하게 보내는 방법, MIME 타입으로 파일이나 html 문서를 전송하는 방법이 존재한다. 

3. 한명에게만 보낼 수도 있고, List에 여러명을 담아 한번에 여러명에게 전송도 가능하다. 

5. Google 계정은 2차 비밀번호를 설정해야 한다.

6. Spring Properties 설정에 따라 에러가 발생할 수 있다! --> 나의 경우 startles 설정 오류발생..

 

생각보다 간단하지만,, 생각한대로 잘 되지 않는 부분이기도 했다. 다양한 에러를 접해본 경험이 있으니

혹시 필요하다면 댓글 작성 해주시면 아는 부분에서는 최대한 답변 해드리겠습니다. 

 

 

틀린 부분이나, 수정할  부분이 있으면 언제든 자유롭게 피드백 주세요!

반응형

댓글