Spring

[Spring] 이메일 전송(JavaMailSende)

머직타드 2022. 3. 24. 20:10

회원 가입을 할 때 이메일을 기입하게 되는 경우가 있습니다. 이 때 해당 이메일을 확인하기 위한 절차나, 사용자가 비밀번호를 잊었을 경우 확인 절차를 위해 메일을 전송하기도 합니다. 그러면 스프링에서 메일을 전송하기 위한 JavaMailSender를 사용해 보겠습니다.

 

 

1. pom.xml에 라이브러리 추가

Mail 관련 기능을 이용하기 위해 pom.xml에 관련 라이브러리를 추가해야 합니다. 가장 쉬운 방법으로 새로운 프로젝트를 생성하면서 관련 기능을 추가해 생성된 dependency 내역을 가져오면 됩니다.

 

기존과 같은 세팅으로 새로운 프로젝트를 생성해 보겠습니다. "Next"를 눌러 줍니다.

JavaMailSender를 사용할 수 있는 "Java Mail Sender"를 클릭해 dependency를 추가하고 "Finish"를 눌러 줍니다.

 

새로 생성된 프로젝트에서 pom.xml에 추가되어 있는 "spring-boot-starter-mail" dependency를 카피하여

기존 개발중이던 프로젝트(여기서는 LMS 프로젝트)에 추가해 줍니다.

 

 

2. G-Mail 설정하기

구글 계정 설정에서 '보안' - 2단계 인증에 "on"으로 체크해 줍니다.

그리고 앱 비밀번호로 들어가서 계정 비밀번호를 입력하고 넘어가 줍니다.

그리고 "기타"를 눌러 생성할 앱의 이름을 아무거나 입력해 "생성"을 눌러줍니다.

16자리 기기용 앱 비밀번호를 나중에 사용하기 위해 별도로 카피해 줍니다.

 

이제 G-Mail에서 우측 상단 설정 메뉴 중, 모든 설정 보기를 눌러 줍니다.

"전달 및 POP/IMAP"탭에서 POP/IMAP 모두 사용 가능 상태가 아니라면 사용 가능으로 설정해 줍니다.

 

 

3. application.yml 설정하기

스프링에서 gmail에서 설정했던 smtp를 사용하기 위해 application.yml을 설정해 줘야 합니다.

패스워드는 G-Mail 셋팅에서 카피해 놓았던 16자리 앱 비밀번호를 기입합니다.

항상 mail 라이브러리를 사용하기 위해 설정할 때, host/port/username/password필수 명시 사항입니다.

* mail.smtp.starttls.enable: JavaMail에 TLS 모드를 시작하도록 명시적으로 요청. Starttls 설정을 확인하면 보안 관련 채널을 생성해 인증서 확인 등의 작업을 거치게 된다.

 

 

4. 메일 전송 테스트

이제 메일 전송을 위한 셋업은 완료되었으니, 실제 프로젝트에서 적용을 해보겠습니다.

 

MailComponets 클래스를 만들어 메일 보내는 테스트를 수행하도록 구성하였습니다. 앞서 pom.xml에 dependency를 추가하였던 Java Mail를 활용하여 JavaMailSender를 통해 메일을 보내도록 클래스를 작성했습니다.

setTo: 수신자 이메일

setSubject: 메일 제목

setText: 메일 내용

@RequiredArgsConstructor: 생성자를 별도로 만들지 않아도 자동 삽입해준다.(여기서는 JavaMailSender)

 

그리고 간편히 테스트를 수행하기 위해, 최상위 경로 페이지를 요청했을 때 자동으로 메일을 보내도록 MainController에 구현해 주면 끝! 이제 이 프로젝트를 실행시키고 http://localhost:8080를 호출하면 수신자로 설정했던 메일함에 메일이 왔는지 확인해 보겠습니다.

 

 

 

JavaMailSender를 사용해 메일 보내기 끝