본문 바로가기

Backend/Utils

JavaMailSender 사용시 에러

반응형
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean
with name 'emailService' defined in file [C:\~~~~~~~\.class]: Unsatisfied dependency expressed
through constructor parameter 1; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 
'org.springframework.mail.javamail.JavaMailSender' available: expected at least 1 bean which
qualifies as autowire candidate. Dependency annotations: {}

...

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean
of type 'org.springframework.mail.javamail.JavaMailSender' available: expected at least 1 bean
which qualifies as autowire candidate. Dependency annotations: {}

autowired를 통한 자동주입이 어렵기 때문에 JavaMailSender타입의 Bean을 새로 등록해본다는 생각해봄

package com.sample.mail;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

@Configuration
public class MailConfiguration {
    @Bean
    public JavaMailSender javaMailSender(){
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();

        javaMailSender.setHost("mail.sample.co.kr");
        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;
    }
}

 

이 이슈가 생기는 근본적인 것을 고민해 보았는데 역시 application.yml의 값들을 제대로 @Value에서 못 읽는다는 생각이 들었다.

@PropertySource(value = " ")나@PropertySource("classpath:")를 쓰려고 해도 해당 어노테이션은 .properties만 적용되고 .yml은 적용되지 않아 사용이 불가능 하다.

반응형