개인용 웹앱을 만드는데 메일 기능이 필요하여 spring-boot-starter-mail dependency를 추가하고 properties에 메일 관련 설정을 지정했는데도 자꾸 다음과 같은 AuthenticationFailedException이 log가 떴다.
1 | Exception in thread "main" org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at |
username(email), password 모두 제대로 설정했는데 계속 이 Exception이 떠서 해당 내용을 검색해봤다.
이 Exception은 구글이 보안 관련하여 일부러 막아놓아서 발생한 것이다.
이에 대한 해결법은 많은 블로그들, 심지어 stackoverflow에서도 보안 수준이 낮은 앱의 액세스를 허용 설정 하라고 한다.
하지만 이 경우 동작은 되지만 아무래도 위험을 감수하고
이 문구가 상당히 불안하다.
보안 수준이 낮은 앱의 액세스를 허용하지 않고 다른 방법을 사용해서 위 문제를 해결해보자.
- 로그에 찍힌 링크인 https://support.google.com/mail/?p=BadCredentials 를 접속한다.
위와 같이 문제해결 방법이 나와있는데 2단계의 2번째에 앱 비밀번호 사용
이 있다.
(2단계의 3번째엔 보안 수준이 낮은 앱을 허용이 있다.)
여기서 앱 비밀번호를 클릭한다.
앱 비밀번호
생성 방법이 위와 같이 나와있다.
여기서 1의 Google 계정
을 클릭한다.
- 계정 화면에서 좌측 탭의
보안
을 클릭한다.
2단계 인증
을 클릭한다.
- 2단계 인증 설정을 한다.
2단계 인증 설정 관련해서는 굳이 더 설명을 하지 않아도 될거라 생각한다.
(핸드폰 등의 기기를 통해 인증을 받고 인증 코드를 받아 이를 인증하고 사용설정을 하고 …)
- 다시 계정 화면으로 돌아온다.
이제 앱 비밀번호
를 설정할 수 있다!앱 비밀번호를
클릭한 후 재인증의 과정을 거친다.
- 앱 비밀번호 받기
나의 경우 Windows 컴퓨터를 사용하기 때문에 위 설정으로 사용했다.생성
을 클릭하면 아래와 같이 앱 비밀번호를 발급받을 수 있다!
- 앱 비밀번호를 properties의 spring.mail.password에 지정한다.
이제 다시 앱을 실행하여 Mail을 발송하면 처음 나왔던 Exception 없이 정상으로 메일발송이 될 것이다.
요즘은 개인정보 보안이 중요하기 때문에 간단한 테스트용으로는 보안 수준이 낮은 앱 허용
을 풀어서 하더라도 테스트 후 바로바로 꺼놓도록 하고 메일을 앱 기능에 추가한 후 서버에 올려서 사용한다면 위와 같이 앱 비밀번호를 사용하도록 하자.