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자리의 비밀번호를 확인한 후 이 비밀번호를 이용해서 메일 서비스를 진행한다.