Spring Core/자질구래

2단계 인증 상태에서 smtp를 이용한 gmail 발송

  • -

gmail을 이용해 smtp를 이용하려는 경우 아래와 같이 코드를 작성할 수 있다.

    @Bean
    public JavaMailSenderImpl mailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setHost("smtp.gmail.com");
        sender.setPort(587);
        sender.setUsername("사용자 이메일");             // gmail 로그인 아이디
        sender.setPassword("사용자 암호");               // gmail 로그인 암호
        sender.setDefaultEncoding("utf-8");
        Properties javaMailProperties = new Properties();
        javaMailProperties.put("mail.smtp.auth", "true");
        javaMailProperties.put("mail.smtp.starttls.enable", "true");
        javaMailProperties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
        
        sender.setJavaMailProperties(javaMailProperties);
        return sender;
    }

일반적인 경우는 잘 전송할 수 있지만 만약 2단계 인증을 적용한 경우(새로운 기기에서 로그인할 때 스마트폰 등에서 2단계 인증을 처리하는 경우)라면 아래와 같은 오류가 발생한다.

 

Caused by: 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 n7sm24543569pff.59 - gsmtp

 

정확한 비밀번호를 넣었음에도 불구하고 확인하라고 하는데 이때는 위 링크(https://support.google.com/mail/?p=BadCredentials)에 나온 안내대로 애플리케이션을 위한 비빌번호를 새로 발급받아서 사용해야 한다.

 

step 1> https://myaccount.google.com > 보안 > google에 로그인 선택

이때 아래처럼 앱 비밀번호가 없음으로 선택되어있다면 아직 비밀번호가 없는 경우이다.

 

setp 2> 위 화면에서 없음을 선택하면 앱 비밀번호를 생성할 수 있다.

앱 선택 부분에서는 메일, 기기 선택 부분에서는 기타(맞춤 이름) 선택 후 "내 프로젝트의 SMTP"등 적절한 이름을 입력후 비밀번호를 생성한다.

 

step 3> 다음 화면에서 16자리의 비밀번호를 확인한 후 이 비밀번호를 이용해서 메일 서비스를 진행한다. 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.