JavaMailSender STARTTLS 인증 오류를 해결한 후 또 다른 에러가 발생하였다..
에러 메시지는 아래와 같았는데
[Request processing failed; nested exception is org.springframework.mail.MailAuthenticationException:
Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted.
Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials e8-20020a62ee08000000b00686dd062207sm297098pfi.150 - gsmtp
] with root cause javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted.
Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials e8-20020a62ee08000000b00686dd062207sm297098pfi.150 - gsmtp
해석해보면 이메일 서비스를 통해 Google 계정으로 이메일을 보내려고 할 때 발생하는 문제이다.
구체적으로 "Username and Password not accepted"와 "BadCredentials"와 관련된 내용이 나와있는데
인증 정보 (사용자 이름 및 비밀번호)가 잘못되었거나 애플리케이션이 Google 계정에 잘못된 인증 정보를 제공하고 있다는 것을 나타낸다.
JavaMailSender를 이용할 때 이메일을 전송할 관리자 계정과 비밀번호를 설정해주어야 하는데 난 Gmail을 사용하기로 했고, Google 계정과 비밀번호 모두 올바르게 입력을 해주었기 때문에 오류가 발생하는게 의아해서 구글링을 해보니 뜻 밖의 원인이 숨어있었다.
원인
프로젝트에서 설정한 Google 계정으로 이메일 전송 기능을 구현하려면 Google 계정의 보안 설정을 변경해야 했다.
"보안 수준이 낮은 앱 허용" 설정을 변경하여 애플리케이션에서 Google 계정에 접근할 수 있도록 허용하거나
보안 설정에서 "앱 암호"를 생성하여 애플리케이션에 사용하도록 설정하면 문제를 해결할 수 있다고 한다.
해결
액세스를 허용하려고 했더니 위와 같은 이유로 더 이상 지원을 안 한댄다. 그럼 2차 인증을 통해 해결하는 수 밖에..
우선 아래 링크를 타고 Google 계정 보안 설정 페이지에 들어간다.
https://myaccount.google.com/security?hl=ko
빨간색으로 표시한 2단계 인증 설정을 클릭한 후 원하는 인증 방법을 선택해주어 완료한다. (핸드폰 등등..)
완료 후 스크롤을 내려 앱 비밀번호 탭을 클릭한다.
이메일 전송을 위해 카테고리의 메일 , Windows 컴퓨터를 선택해준다.
선택 후 Windows 컴퓨터 앱 용 비밀번호가 생성되는데, 이 비밀번호를 어플리케이션에서 사용하면 된다.
spring:
mail:
host: smtp.gmail.com
port: 587
username: caraxxx13@gmail.com
password: ****************
properties:
mail:
smtp:
auth: true
starttls:
enable: true
나는 메일 전송에 필요한 값을 application.yml 파일에 작성했는데 발급받은 앱 비밀번호를 위의 password로 넣어주었다.
비밀번호 설정 후 메소드를 호출했더니 위처럼 원하는 이메일을 발송할 수 있게 되었다! 👍
댓글