본문 바로가기

Spring/Spring

0103 Spring - 구글 기반 이메일 보내기

728x90
반응형

 

이메일을 발송하기 위해서는 메일 서버가 필요하다. 메일 서버는 아래와 같은 두 가지 방법으로 사용이 가능한데, 이번에는 두 번째 방법인 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

   
4-2. application.yml
   

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

 

728x90
반응형

'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