이 글에선 Spring Boot 에서 Email을 보내는 방법을 학습할 것입니다.
//email
implementation("org.springframework.boot:spring-boot-starter-mail")
spring boot gradle을 이용해 의존성을 주입합니다.
MailSender 인터페이스
JavaMailSender 인터페이스
mailSender를 구현하는 인터페이스입니다.MIME 메세지 생성을 위해 MimeMessageHelper 클래스와 같이 사용되며 MIME 메세지를 지원합니다.
여기서 MIME란?
Multipurpose Internet Mail Extensions의 약자로 MIME는 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되었기 때문에 이름에 Internet Mail Extension이 들어갑니다. 현재는 웹을 통해서 여러 형태의 파일 전달을 위해 사용됩니다.
JavaMailSenderImpl class
SimpleMailMessage class
MimeMessagaePreparator 인터페이스
MimeMessageHelper 클래스
MIME 메세지 생성을 위한 헬퍼 클래스입니다. HTML 레이아웃에서 이미지, 일반적인 메일 첨부 파일 및 텍스트 내용을 지원합니다.
이번 학습에서는 위 클래스와 인터페이스를 어떻게 사용하는지 배울 것입니다.
@Bean
public JavaMailSender getJavaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(587);
mailSender.setUsername("my.gmail@gmail.com");
mailSender.setPassword("password");
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.debug", "true");
return mailSender;
}
보통 여기서 host 나 포트 그리고 비밀정보에 관한 정보는 application.properties에 저장합니다.
application.properties 양식
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=
spring.mail.password=
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Google SMTP 설정은 아래 블로그를 참조해주세요
https://kitty-geno.tistory.com/43
이제 dependency 설정과 프로퍼티설정을 완료했으니 메일을 보내기만 하면 됩니다.
import org.springframework.mail.SimpleMailMessage
import org.springframework.mail.javamail.JavaMailSender
import org.springframework.stereotype.Service
@Service
class UserService(
private var javaMailSender: JavaMailSender
){
fun sendSimpleMesssage(
to: String,
subject: String,
text: String
){
val message = SimpleMailMessage()
message.setFrom("noreply@baeldung.com")
message.setTo(to)
message.setSubject(subject)
message.setText(text)
javaMailSender.send(message)
}
}
여기서 주의하실 점이있습니다. from 에 보내는 주소를 적을 필요는 없지만 많은 SMTP 서버가 from이 없는 메일을 거절한다고 합니다. 그렇기 때문에 noreply@baeldung.com 이메일을 from에서 사용합니다.