이메일 인증을 통해서 회원 가입을 하는 경우 서버에서 메일을 보낼 수 있어야 합니다.
계정 설정
구글 계정 - 보안으로 이동합니다.
그리고 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 : N 관계 만들기 (0) | 2024.09.25 |
---|---|
spring boot - 환경 변수 (3) | 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 |