스프링부트에서 JavamailSender사용시 sendMail부분에서 다음과 같은 에러가 발생
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.NoSuchProviderException: No provider for SMTP. Failed messages: javax.mail.NoSuchProviderException: No provider for SMTP at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:446) ~[spring-context-support-5.1.2.RELEASE.jar!/:5.1.2.RELEASE] at
.
.
.
Caused by: javax.mail.NoSuchProviderException: No provider for SMTP
at javax.mail.Session.getProvider(Session.java:545) ~[javax.mail-1.6.2.jar!/:1.6.2] at
.
.
소스코드
@Bean
public JavaMailSenderImpl mailSender() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setProtocol("SMTP");
javaMailSender.setHost("127.0.0.1");
javaMailSender.setPort(25);
return javaMailSender;
}
문제의 원인은 javaMailSender.setProtocol("SMTP"); 이부분이였다.
setProtocol의 "SMTP"를 "smtp" 소문자로 변경해주면 해결된다.
해결책
"SMTP" => "smtp"
이유
JavaMailSenderImpl 파일을 들어가보면 알 수 있다. 내부에 DEFAULT_PROTOCOL 이 소문자로 할당되어있다.
public class JavaMailSenderImpl implements JavaMailSender {
public static final String DEFAULT_PROTOCOL = "smtp";
항상 문제가 발생했을 때 문제 해결에 그치지 말고 이유에 대해서도 꼭 짚고 넘어가도록 하자!!!!
문제 해결보다 중요한게 원인 파악 이라고 생각한다.