네이버 SMTP를 사용하여 이메일 인증을 구현하려고 했다.
이 때, JavaMailSender
를 사용하여 이메일을 보낼 수 있도록 하였다. 이 과정에서 application.yml
에 이메일 전송을 위한 정보를 저장하였다. application.yml에 담겨있던 코드는 밑과 같았다.
spring:
mail:
host: smtp.naver.com
port: 465
username: {YOUR_NAVER_ADDRESS}
password: {YOUR_NAVER_PASSWORD}
properties:
mail:
smtp:
auth: true
starttls:
enable: true
그리고 빌드를 하여 테스트를 해보았더니 다음과 같은 오류가 발생하였다.
Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.
이는 Configuration을 찾지 못해 생긴 오류였다. 그래서 해결책으로 @Autowired
어노테이션을 달아주었더니 다음과 같은 오류를 보았다.
자동주입을 할 수 없다는 에러였다. 하지만, build.gradle에 implementation 'org.springframework.boot:spring-boot-starter-mail'
라는 의존성이 추가되어 있었고, application.yml도 제대로 되어있었다.
에러 메세지를 보면 'JavaMainSender' 타입의 bean을 찾을 수 없습니다.
라는 문구가 보일 것이다. 즉, JavaMailSender
타입의 bean을 새로 등록하면 된다는 생각을 하였다.
따라서 config를 관리하는 디렉터리에 mail
이라는 디렉터리를 만들고 MailConfig.java
를 만들어주었다.
@Configuration
public class MailConfig {
@Bean
public JavaMailSender javaMailService() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("smtp.naver.com");
javaMailSender.setUsername("네이버 SMTP 설정 이메일");
javaMailSender.setPassword("네이버 계정 비밀번호");
javaMailSender.setPort(465);
javaMailSender.setJavaMailProperties(getMailProperties());
return javaMailSender;
}
private Properties getMailProperties() {
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.debug", "true");
properties.setProperty("mail.smtp.ssl.trust","smtp.naver.com");
properties.setProperty("mail.smtp.ssl.enable","true");
return properties;
}
}
위와 같이 @Configuration
과 @Bean
을 사용하여 수동으로 스프링 컨테이너를 등록하였다.
안녕하세요:) 저도 똑같은 에러를 보고 있는데요.. yml에 추가를 해줘도 저렇게 별도로 해줘야 하나요??