Spring Email by Kotlin

김종완·2022년 7월 21일
0

Overview

이 글에선 Spring Boot 에서 Email을 보내는 방법을 학습할 것입니다.

Gradle Dependencies

    //email
    implementation("org.springframework.boot:spring-boot-starter-mail")

spring boot gradle을 이용해 의존성을 주입합니다.

자바 이메일에 핵심 클래스와 인터페이스들

  1. MailSender 인터페이스

    • 이메일 보내는 기능을 제공하는 top-level 인터페이스
  2. JavaMailSender 인터페이스

    • mailSender를 구현하는 인터페이스입니다.MIME 메세지 생성을 위해 MimeMessageHelper 클래스와 같이 사용되며 MIME 메세지를 지원합니다.

    • 여기서 MIME란?

      Multipurpose Internet Mail Extensions의 약자로 MIME는 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되었기 때문에 이름에 Internet Mail Extension이 들어갑니다. 현재는 웹을 통해서 여러 형태의 파일 전달을 위해 사용됩니다.

  3. JavaMailSenderImpl class

    • JavaMailSender 인터페이스를 구현한 클래스입니다. MimeMessage 와 SimpleMailMessage를 보낼 수 있도록 지원합니다.
  4. SimpleMailMessage class

    • 간단한 메일을 보낼 수 있게 해주는 클래스입니다. 메일은 from, to, cc, subject 및 text 필드를 포함합니다.
    • cc란? 메일을 추가로 받는 사람들
  5. MimeMessagaePreparator 인터페이스

    • MIME 메세지 준비를 위해 콜백 인터페이스를 제공합니다.
  6. MimeMessageHelper 클래스
    MIME 메세지 생성을 위한 헬퍼 클래스입니다. HTML 레이아웃에서 이미지, 일반적인 메일 첨부 파일 및 텍스트 내용을 지원합니다.

이번 학습에서는 위 클래스와 인터페이스를 어떻게 사용하는지 배울 것입니다.

Spring Mail Server Properties

  • SMTP 서버를 지정하는데 필요한 메일 속성은 JavaMailSenderImpl을 사용하여 정의할 수 있습니다. 아래는 예제입니다.
@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

Sending Email

이제 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에서 사용합니다.

소스코드

https://github.com/3210439/emailtest

참조
https://www.baeldung.com/spring-email

profile
개발에 재미를 느끼며 꾸준히 성장하는 개발자 김종완 입니다.

0개의 댓글