Develop/Spring

[Spring Boot] Naver Email 보내기

순무엄마동생 2021. 7. 16. 17:04

Email을 보내야하는 코드를 작성해야하는데 에러가 있었어서 기록!!

 

📫 Email 보내는 방법 

1. dependency 추가

2. SMTP 설정

3. 이메일 보내기

 

1. Dependency 추가 📝

+ 필요한 디펜던시를 찾을 땐, 여기를 이용하면 된다!

 

나는 이 부분 때문에 에러가 났었다! 처음에 javax.mail 디펜던시를 추가 했었는데 찾아보니 이 디펜던시는 Java에서 메일을 보낼 때 사용하는 디펜던시라고 했다. 

javax.net.ssl.SSLHandshakeException이 발생했는데 이유는 HTTPS를 지원하지 않아서 인 것 같다. (더 찾아봐야지!) SSL 어쩌구 저쩌구.... 더 찾아볼 것!

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

 

 

그래서 위의 디펜던시가 아닌 아래 Dependency 또는 Gradle를 추가해줘야한다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.5.1</version>
</dependency>
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.5.1'

 

 

2. SMTP 설정 🔧

2-1. Naver SMTP 설정

이메일을 보낼 계정이 로그인하여 메일함에 들어가 아래와 같이 SMTP 사용을 가능하게 해줍니다.

 

2-2. Spring Boot SMTP 설정

위 사진에서 하단에 밑줄친 SMTP 서버명과 SMTP 포트를 이용하여 Spring Boot에 properties 또는 yml 파일에 설정을 해줍니다. username과 password는 본인의 아이디와 비밀번호를 입력하시면 됩니다.

spring.mail.host=smtp.naver.com
spring.mail.port=465
spring.mail.username={YOUR_NAVER_ID}
spring.mail.password={YOUR_NAVER_PASSWORD}
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring:
  mail:
    host: smtp.naver.com
    port: 465
    username: {YOUR_NAVER_ID}
    password: {YOUR_NAVER_PASSWORD}
    properties:
      mail:
        smtp:
          auth: true
          ssl:
            enable: true

 

 

3. 메일보내기 📩

@RequiredArgsConstructor
public class SendMail {
    private final JavaMailSender sender;
    
    public void sendMail(){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(YOUR_NAVER_ID);		// 보내는 이메일
        message.setTo(MESSEAGE_RECEIVER_ID);	// 받는 이메일
        message.setSubject(TITLE);		// 메일 제목
        message.setText(CONTENT);		// 메일 내용
        message.setSentDate(new Date());	// 송신 날짜
        sender.send(message);		// 실제 보내기
    }
}

 

 

 

추가사항 🤷‍♀️

1. SSL의 버전이 높아진 것이 TSL로 알고 있다. SSLHandshakeException에 대해서 더 찾아봐야겠다.

2. javax.mail 디펜던시를 사용할 땐, MimeMessage를 이용하는데 JavaMessageSender하고 어떻게 다른지 찾아봐야겠다!