IT/Web

[Springboot/Gradle] JAVA SMTP로 비밀번호 찾기 메일 보내기(NAVER)

코딩하는 너구리 2021. 1. 3. 02:10
반응형

 

 

간단한 서비스를 개발하다가 회원들의 비밀번호 찾기 기능이 필요하게 되었고,

이메일 정보를 이용해 해당 기능을 구현하기로 결정하였습니다.

JAVA SMTP가 잘 되어 있어서 어렵지 않게 구현할 수 있었으며 복잡한 내용은 아니므로 중간중간 사진을 첨부해 참고하기 편하도록 글을 남겨두려 합니다.

 

 

 

SMTP란?

간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)은 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 메일 서버간의 송수신뿐만 아니라, 메일 클라이언트에서 메일 서버로 메일을 보낼 때에도 사용되는 경우가 많다. (출처 : 위키피디아 )

 

간단히 Simple Mail Transfer Protocol의 약어로 이메일을 전송하기 위해서 사용되는 정도로만 기억해두고 시작하겠습니다.

 

 

 

개발 환경 - [NAVER] Springboot - Gradle

우선 기본 개발환경은 SpringbootGradle입니다.

Maven환경이어도 크게 다를 건 없지만 라이브러리를 셋팅하는 부분이 조금 다르니 그 부분은 잘 해결해주시길...

Gmail이나 nate, daum 등 여러 메일이 있지만 사람들이 가장 많이 사용하는 NAVER를 선택하게 되었습니다.

 

 

 

[의존성 설정] build.gradle에 의존성 설정하기

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-mail'
}

 

build.gradle에 이렇게 한 줄 적어주시고 [Ctrl + Shift + O] 눌러서 의존성 설정해주시면 됩니다.

 

 

 

 

[발신자 메일 정보 설정] application.yml에 NAVER 메일 정보 설정하기

SMTP를 통해 메일을 발신할 때, 발신자 메일 정보가 필요합니다. 이를 위해 제 NAVER 사용 정보를 application.yml에 지정해두겠습니다.

 

spring:
  mail:
    host: smtp.naver.com
    port: 465
    username: 이메일@naver.com
    password: 비밀번호
    properties:
      mail.smtp.auth: true
      mail.smtp.ssl.enable: true

 

username에 메일 주소를, password의 비밀번호를 설정해주시면 됩니다. 실제 메일의 ID와 PWD를 입력해야 하니, Git에 커밋하실 때에는 꼭 application.yml을 .gitignore 파일을 통해 계정 정보가 노출되지 않도록 조심하세요!

 

 

 

 

 

[NAVER 설정] SMTP 사용 설정

다음으로 NAVER 계정을 통해 SMTP를 이용하기 위해서, NAVER 계정에 간단한 설정을 해보도록 하겠습니다.

 

 

NAVER 메일에서 위 사진에 보이는 것처럼 톱니바퀴 모양을 눌러주세요.

 

 

내용을 확인해본 뒤, 확인 버튼을 눌러 설정을 저장합니다.

이렇게 하면 설정 부분은 모두 끝나게 됩니다.

그럼 이제 코드에서 실제 메일을 보내보도록 하겠습니다.

 

 

 

[코드 구현]

이제 Controller에 "비밀번호 찾기" API를 만들어보도록 하겠습니다.

먼저 메일 전송을 위해 JavaMailSender를 받아오겠습니다.

일반적으로 @Autowired 어노테이션을 이용하지만, 어노테이션을 선언하지 않은 이유는

저는 UserController에 @RequiredArgsConstructor 어노테이션을 활용하여 @Autowired는 사용하지 않았습니다.

 

 

위 사진처럼 javaMailSender를 선언해주면 이후 코드에서 사용할 수 있습니다.

이전에 build.gradle에서 설정해주었기 때문에 바로 불러올 수 있는 것을 확인할 수 있습니다.

추가적으로 발신자 메일 주소인 from 값은 application.yml에 설정한 값을 @Value 를 통해 가져왔습니다.

 

 

그럼 이제 비밀번호 찾기 API에 적용해보도록 하겠습니다.

 

 

 

우선 MimeMessageHelper를 이용하였습니다.

 

비밀번호 찾기 안내 메일에서 이미지까지 첨부하고 싶었기 때문에 선택하게 되었고

생각보다 사용하기 편하게 메서드가 잘 정의되어 있었기 때문입니다.

 

setFrom(발신자 메일 주소), setTo(수신인 주소), setSubject(제목), setText(메일 내용) 등

메서드 이름만으로도 용도를 이해하기 쉽게 만들어져 있습니다.

 

 

메일의 본문 내용은 mailBodyUtil.getMailBody() 함수를 직접 정의하였습니다.

함수는 String 형태로 HTML 코드를 리턴하도록 하였습니다.

 

 

중간에 사용한 addInline() 메서드는 본문에 첨부한 이미지를 위해 사용하였습니다.

"hago" 라는 이름으로, 본문에서 <img src=\"cid:hago\"> 형태의 HTML을 작성하였기 때문에

이미지에 해당하는 파일을 FileDataSource()를 통해 첨부해주는 방식입니다.

일반적으로 데스크톱에서 테스트 하신다면 FileDataSource("c:\...") 주소로 파일을 설정해주세요

 

값을 다 설정해준 뒤에는 javaSender.send()를 이용하여 발송해주었습니다.

 

 

최종적으로 발송에 성공한 사진을 첨부해두겠습니다.

 

 

 

 

반응형

'IT > Web' 카테고리의 다른 글

JAVA HttpClient와 CloseableHttpClient 차이점  (0) 2023.02.03
PORT 포트번호란  (0) 2022.08.11
TCP란?  (0) 2022.08.10
IP(Internet Protocol)  (0) 2022.08.03
@PostMapping과 @PutMapping의 차이  (0) 2020.10.15