Simple Java Mail 로 이메일 보내기
Gmail SMTP 을 작성하면서 구글 계정으로 이메일을 발송하는 것을 다룬 것도 1년이 넘게 지났다. 스프링 부트 기반의 프로젝트에서 spring-boot-starter-mail 모듈을 통해 JavaMailSender로 이메일을 보낼 수 있는 구현을 쉽게 찾아볼 수 있다. 우연히 알게된 Simple Java Mail 라이브러리는 JavaMailSender 와 MimeMessageHelper와 같은 클래스에 익숙하지 않은 초보 개발자들에게 간단하게 메일 발송을 할 수 있도록 API를 제공해준다.
Features
이메일 발송에 대한 설정을 깊게 들어가면 어려울 수 있으나 초보 개발자에게 적합한 특징은 아래와 같다.
SSL and TLS with Google mail
기존에 프리마커 템플릿으로 이메일 발송하기 에서 처럼 Gmail SMTP 서버를 이용할 때 STARTTLS 방식을 사용했었던 것처럼 어떻게 설정해야하는지를 SSL and TLS with Google mail에서 설명해주고 있다. STARTTLS 방식은 SMTP_TLS를 사용해야함을 알 수 있다.
@Import(SimpleJavaMailSpringSupport.class)
@SpringBootApplication
public class SimpleMailApplication {
public static void main(String[] args) {
SpringApplication.run(SimpleMailApplication.class, args);
}
}
simplejavamail.javaxmail.debug: true
simplejavamail.smtp.host: smtp.gmail.com
simplejavamail.smtp.port: 587
simplejavamail.transportstrategy: SMTP_TLS
simplejavamail.smtp.username: kdevkr@gmail.com
simplejavamail.smtp.password: '앱 비밀번호'
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
class GmailSmtpTests {
@Autowired
Mailer mailer;
@Test
void sendMail() {
Assertions.assertDoesNotThrow(() -> mailer.testConnection());
Email email = EmailBuilder.startingBlank()
.from("Mambo <kdevkr@gmail.com>")
.to("kdevkr@gmail.com")
.withSubject("Java Mail Test with simplejavamail")
.withPlainText("Hello world")
.buildEmail();
Assertions.assertDoesNotThrow(() -> mailer.sendMail(email));
}
}
앱 비밀번호 발급은 Gmail SMTP 글을 참고하세요.
Convert Email to MimeMessage
EmailConverter, MailerHelper, JMail 클래스를 통해 유용한 기능을 제공하는데 EmailConverter를 이용하면 Email 을 MimeMessage로 변환하는 것을 제공해주기 때문에 JavaMailSender와의 통합도 유용해보인다.
Email email = EmailBuilder.startingBlank().buildEmail();
MimeMessage mimeMessage = EmailConverter.emailToMimeMessage(email);
더 자세히 spring-boot-starter-mail 과 비교해보고 싶다면 Feature Comparison Matrix 문서를 참고해보세요.