본문 바로가기
프로그래밍/Java

[Error] javax.mail.MessagingException 해결

by 물고기고기 2023. 10. 18.

사이트 프로젝트 진행 중 서버에서 메일이 추가로 안나가는 오류가 있었다.

 

2023-10-17 14:10:49.102 ERROR 11572 --- [nio-8080-exec-2] c.p.u.email.service.EmailService         : Mail server connection failed; nested exception is javax.mail.MessagingException: Could not convert socket to TLS;
  nested exception is:
	javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. Failed messages: javax.mail.MessagingException: Could not convert socket to TLS;
  nested exception is:
	javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Hibernate: insert into mail_history (created_date, modified_date, log_message, recipient, success_flag) values (?, ?, ?, ?, ?)

이러한 에러메세지였고 읽어보면 TLS이란게 문제가 있어서 오류가 난다는 듯하다.

찾아보니 Server와  Client 간 사용하려고 하는 SSL/TLS 버전이 상이한 경우 위 오류가 난다고 한다.

 

application.properties에서 spring.mail.properties.mail.smtp.ssl 관련 설정들을 추가해주면 오류가 나지 않는다.

 

# SMTP 설정
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=(유저네임)
spring.mail.password=(앱 인증 비밀번호)

# SMTP 인증 및 타임아웃 설정
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.timeout=5000

# STARTTLS 활성화
spring.mail.properties.mail.smtp.starttls.enable=true

# 추가 설정 - SSL 관련
spring.mail.properties.mail.smtp.ssl.trust=smtp.gmail.com
spring.mail.properties.mail.smtp.ssl.protocols=TLSv1.2

 


 추가로 자바에선 이메일 서버를 구현하는 방법이 여러가지 있다. 그 중 프로퍼티만 설정해서 메일 기능을 구현하는 경우가 있는데 이때,


spring.mail.username=(유저네임)
spring.mail.password=(앱 인증 비밀번호)

 

이 부분에 어떤걸 넣어야하는지 헷갈리는 경우가 종종 있다.

 

  1. Gmail 계정에 로그인합니다.
  2. Google 계정 설정으로 이동합니다. (https://myaccount.google.com/)
  3. 왼쪽 메뉴에서 "보안"을 선택합니다.
  4. "Google 계정을 사용하는 앱" 섹션으로 이동합니다.
  5. "앱 액세스 허용"을 클릭하고 앱을 허용하려면 스위치를 켭니다.
  6. Java 애플리케이션에서 Gmail SMTP 서버에 액세스하는 경우 "보안" 섹션의 "앱 비밀번호"에서 앱 비밀번호를 생성하고 사용합니다.

이러한 순서로 설정해야하는데 좀 헷갈리니까 이미지로 설명하자면

 

1. 구글 계정 관리페이지로 들어간뒤 보안을 선택한다.

2. 2단계 인증에 들어간 뒤 쭉 내리면 앱 비밀번호 설정으로 가면 된다.

 

3. 이때 설정한 비밀번호 값을 spring.mail.password 에 넣어주면 된다.



참고한글
https://nomeleon.tistory.com/128

 

댓글