본문 바로가기

개발/백엔드

spring boot - 메일 전송

이메일 인증을 통해서 회원 가입을 하는 경우 서버에서 메일을 보낼 수 있어야 합니다.

 

계정 설정

구글 계정 - 보안으로 이동합니다.

 

그리고 2단계 인증을 해줍니다.

 

이제 앱 비밀번호를 설정해 주겠습니다.

 

앱 비밀번호로 가면 아래와 같이 나옵니다. 

 

그럼 16개의 알파벳이 나옵니다. 구글은 이걸 따로 적어두지 않아도 된다고 하지만 이거 나중에 써야 하므로 적어둡니다.

 

이제 메일을 설정할 것입니다. gmail - 설정으로 갑니다.

 

전달 및 POP/IMAP로 가서 둘 다 사용으로 체크해 줍니다.

 

서버

이제 서버 설정을 합니다. build.gradle에 다음 의존성을 넣어줍다.

 

implementation 'org.springframework.boot:spring-boot-starter-mail' : 이메일을 보내기 위한 기능을 제공
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' : Thymeleaf를 사용해 템플릿을 처리할 수 있도록 해줌
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' : 공통 레이아웃을 정의하고 여러 페이지에서 재사용할 수 있음

 

이제 application.yarm으로 가서 메일 설정을 해줍니다.

 

smtp.gmail.com : 지메일 SMTP 서버 호스트입니다.

port : 지메일 SMTP 서버 포트입니다.

username : 이메일 앞부분입니다. 저는 techtemplesem@gmail.com이므로 techtemplesem를 썼습니다.

password : 아까 받은 16글자입니다.

 

email package

이메일 패키지를 만들고 api를 만들어 줍니다. 먼저 EmailRequest로 요청을 받습니다. Email annotation을 이용해서 이메일만 받을 수 있도록 합니다.

 

이제 Controller를 만들어 줍니다.EmailRequest를 Post로 받습니다.

 

Service도 만들어 줍니다.

 

MimeMessage : 다양한 형식의 이메일(html, 첨부 파일 등)을 지원
javaMailSender : 이메일을 보낼 수 있는 다양한 메서드 제공
MimeMessageHelper : MimeMessage 객체를 더 쉽게 조작할 수 있도록 도와줌
new MimeMessageHelper(mimeMessage, false, "UTF-8") 의 2번째 파라미터 : 멀티파트 메시지(본문에 HTML 콘텐츠와 일반 텍스트를 함께 포함, 첨부 파일 추가)를 쓸 것인지 여부

 

여기서 setContext는 내용에 해당하는 부분으로 직접 구현해 줍니다.

 

Context : Thymeleaf의 Context 객체. 템플릿에 전달할 변수와 값 지정
springTemplateEngine.process("hello", context) : hello라는 이름의 템플릿을 사용하고 context에 세팅된 변수를 사용

 

이제 템플릿을 만들어 줍니다. resources - templates - hello.html을 만듭니다.

 

그리고 탬플릿을 만들어 줍니다. 

xmlns:th="http://www.thymeleaf.org" : th: 접두사를 쓸 수 있게 해줌
th:text="${who}" : who에 있는 변수를 text로 넣음
이 외에 th:if, th:each 등이 있음

 

실행

이제 talent로 실행해 줍니다.

 

잘 안보이긴 하지만 http://localhost:8080/open-api/mail/hello에 POST로 

{
  "email":"techtemplesem@gmail.com"
}

 

를 보냅니다. 실행하면 

 

이렇게 보내지는 것을 확인할 수 있습니다.

개선점

talent로 실행하면 생각보다 시간이 오래 걸립니다. 이는 쓰레드를 이용해 비동기로 처리할 수 있습니다.

'개발 > 백엔드' 카테고리의 다른 글

spring boot - 환경 변수  (1) 2024.09.22
spring boot - db 조회  (0) 2024.09.10
spring boot - filter  (2) 2024.09.08
spring boot - post 전송(with data)  (1) 2024.09.04
spring boot - 데이터베이스 연결  (0) 2024.09.03