이메일을 발송하기 위해서는 메일 서버가 필요하다. 메일 서버는 아래와 같은 두 가지 방법으로 사용이 가능한데, 이번에는 두 번째 방법인 Gmail의 SMTP 서버를 활용하여 이메일을 발송하는 방법에 대해 알아보도록 하자.
- 메일 서버 직접 구축
- 구글, 네이버 등 포털 사이트에서 제공하는 SMTP 서버 이용
2. 구글 계정 설정
Gmail의 SMTP 서버를 활용하기 위해서는 계정 설정이 필요하다.
1) 구글 계정 관리 - 보안 탭 - 앱 비밀번호 클릭
(보안 탭의 2단계 인증까지 완료된 상태에서 진행해야 한다.)
2) 앱 : 메일 / 기기 : 기타 (맞춤 이름) 선택하고 기기 이름ex) Mail for test을 입력 후 생성 클릭
3) 아래와 같이 16자리의 앱 비밀번호가 생성된 것을 확인할 수 있다.
(앱 비밀번호가 유출되면 다른 사용자가 본인의 계정으로 메일에 접근할 수 있으므로 주의해야 한다.)
3. 개발 환경
- Java 11
- Spring Boot 2.5.3
4. 공통설정
4-1. build.gradle
5. 텍스트로 구성된 이메일 발송Permalink
[EmailMessage.java]
[EmailService.java]
MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, @Nullable String encoding) | |
이메일을 위한 포맷인 Mime 타입의 메시지 생성을 도와주는 객체 | |
MimeMessage mimeMessage | Mime 메시지 |
boolean multipart | 첨부파일 전송을 위한 multipart 여부 |
@Nullable String encoding | 인코딩 방식 |
[EmailController.java]
[테스트 결과]
6. HTML로 구성된 이메일 발송
[EmailMessage.java]
[EmailService.java]
Line 14 : 두 번째 인자인 HTML 여부를 false로 주면 HTML을 인식하지 못하고 텍스트로 발송
MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, @Nullable String encoding) | |
이메일을 위한 포맷인 Mime 타입의 메시지 생성을 도와주는 객체 | |
MimeMessage mimeMessage | Mime 메시지 |
boolean multipart | 첨부파일 전송을 위한 multipart 여부 |
@Nullable String encoding | 인코딩 방식 |
[EmailController.java]
[테스트 결과 - HTML여부를 true로 설정]
HTML이 정상 반영된 것을 확인할 수 있다.
[테스트 결과 - HTML여부를 false로 설정]
HTML 태그를 인식하지 못하고 텍스트로 표시된 것을 확인할 수 있다.
7. Template Engine을 이용한 이메일 발송
Template Engine(템플릿 엔진)이란 템플릿과 데이터를 이용하여 동적으로 컨텐츠를 생성하는 방법을 말한다. 스프링 부트가 자동설정을 지원하는 Template Engine은 FreeMarker, Groovy, Thymeleaf, Mustache 4가지가 있는데, 이 중에서 Thymeleaf를 이용한 이메일 발송 방법을 알아보도록 하자.
[build.gradle]
[mail-sample.html]
[EmailMessage.java]
[EmailService.java]
Line 14 : 두 번째 인자인 HTML 여부를 false로 주면 HTML을 인식하지 못하고 텍스트로 발송
MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, @Nullable String encoding) | |
이메일을 위한 포맷인 Mime 타입의 메시지 생성을 도와주는 객체 | |
MimeMessage mimeMessage | Mime 메시지 |
boolean multipart | 첨부파일 전송을 위한 multipart 여부 |
@Nullable String encoding | 인코딩 방식 |
[EmailController.java]
Line 11 : mail-sample.html의 nickname으로 넘겨줄 값 세팅
[테스트 결과 - HTML여부를 true로 설정]
[테스트 결과 - HTML여부를 false로 설정]
🌐 무료 도메인(DNS) 발급받기
https://www.freenom.com/en/index.html?lang=en
Freenom - A Name for Everyone
Sorry, is not available. IMPORTANT NOTICE: Because of technical issues the Freenom application for new registrations is temporarily out-of-order. Please accept our apologies for the inconvenience. We are working on a solution and hope to resume operations
www.freenom.com
🌐HTTPS 사용을 위한 SSL 인증서 발급 및 설치, 적용
https://zerossl.com/?fpr=juan-pablo57
Free SSL Certificates and SSL Tools - ZeroSSL
zerossl.com
프로젝트에 FCM을 사용하면서 local 환경 외에서는 https를 사용해야하는 상황이 일어났다.
https 사용을 위해서는 SSL(Secure Sockets Layer, SSL) 인증서에 의해 보안이 증명된 페이지여야 하기 때문에
SSL 인증서 발급이 필요하다.
또 인증서 발급을 위해선 도메인이 필요하다.
따라서 HTTPS를 사용하기 위해선 도메인과 SSL 인증서가 필요하다고 보면 되겠다.
SSL 인증서는 렛츠인크립트를 포함하여 다양한 무료 인증서 발급 서비스를 통해 발급 받을 수 있다.
도메인 또한 무료도메인을 제공해주는 여러 서비스 사이트가 있기 때문에 걱정이 없다.
(다만, 무료 서비스이므로 빠른 서비스는 기대하지 말도록 하자)
사용된 서비스 사이트
도메인 : 내도메인.한국
인증서: ZeroSSL
우선, 도메인을 받아 내 IP와 연결해주고 기타 리다이렉트 설정을 해준다.
다음으로, 해당 도메인으로 SSL 인증서 신청을 한 뒤 인증이 필요하다.
인증은 인증 파일을 통해 인증을 하는 방식을 선택하였다.
인증을 위해 root 디렉토리에 .well-known/pki-validation/ 경로를 만들어주고 해당 경로에 인증파일을 넣어준다.
이 과정에서 본인은 일반 윈도우OS 환경에서 진행하였기 때문에 .이 들어간 폴더는 일반적인 방법으로는 생성이 안된다.
root 디렉토리에서 cmd를 열고 mkdir 명령어를 통해 .well-known 폴더를 생성해주었다.
그 후 홈페이지에 제시된 인증 확인 링크를 통해 제대로 인증 파일을 확인하고 인증 확인을 통해 다음으로 넘어간다.
이제 비로소 SSL 인증서가 포함된 .zip 압축파일을 사이트에서 받아 인증서를 사용할 수 있다.
해당 ZeroSSL에서 제공하는 파일은
certificate.crt
ca_bundle.crt
privatekey.key
로 구성되어 있다.
이중 certificate.crt 파일을 실행하여
로컬 컴퓨터 > 모든 인증서를 다음 저장소에 저장 체크 > 찾아보기 중 신뢰할 수 있는 루트 인증 기관 선택 > 마침
순서대로 설치를 해주면 된다.
https://mani4u.tistory.com/380
ZeroSSL에서 무료 인증서 발급받기
OverviewPermalink SSL(Secure Sockets Layer)은 클라이언트와 서버간의 통신을 제3자가 보증해주는 전자화된 문서입니다. 클라이언트가 서버에 접속한 직후, 서버는 클라이언트에게 해당 인증서 정보를 전
mani4u.tistory.com
'Spring > Spring' 카테고리의 다른 글
0109 Spring - Security (2) Custom Login (0) | 2023.02.03 |
---|---|
0105 Spring - Spring Web Security (0) | 2023.01.05 |
1222 Spring 페이징처리 게시판목록 (0) | 2022.12.22 |
1220 Spring - AOP(Aspect Oriented Programming) (0) | 2022.12.20 |
1216 Spring - (0) | 2022.12.16 |