본문 바로가기
스프링

gmail smtp 사용해서 스프링으로 메일 보내기

by RWriter 2021. 8. 5.
반응형

예제소스는 깃허브에 있습니다.

 

1. 이메일을 보내는 Gmail 의 2단계 인증 진행

구글 계정의 보안 설정 접속 후 2단계 인증 진행

https://myaccount.google.com/u/2/security

 

 

2단계 인증이 완료되면 아래와 같이 설정했다는 안내가 나온다.

 

2. 앱 비밀번호 설정

 

 

앱설정 -> 메일

기타 설정 -> 기타(맞춤 이름) 입력

적절히 앱 이름을 입력하고 생성을 누르면 아래와 같이 비밀번호가 제공된다.

 

3. 스프링 부트 설정

스프링 부트에 이메일 모듈을 추가한다.

implementation 'org.springframework.boot:spring-boot-starter-mail'

 

application.yml 에 Gmail smtp 설정을 추가한다. 이때 username, password 에는 이메일과 앱 비밀번호가 들어가는데 보안을 위해서 환경변수로 입력받게 하고, 코드상에서 노출을 하지 않도록 한다.

spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: ${MAIL_USERNAME}
    password: ${MAIL_PASSWORD}
    properties:
      mail:
        smtp:
          socketFactory.class: javax.net.ssl.SSLSocketFactory
          auth: true
          starttls:
            enable: true

 

인텔리제이의 Run Configuration 에서 환경변수를 아래와 같이 입력할 수 있다.

MAIL_USERNAME={email};MAIL_PASSWORD={pw}

 

 

설정까지 추가하면 스프링 구동 시에 JavaMailSender 라는 빈이 올라오게 된다.

@ConditionalOnMissingBean(JavaMailSender.class) 의 뜻은 JavaMailSender 클래스의 빈이 따로 없다면 mailSender 메서드로 빈을 띄우겠다는 뜻이다. 코드 내에 따로 JavaMailSender 를 빈으로 만든적이 없으니 기본으로 JavaMailSenderImpl 이 빈이 된다.

 

MailSenderPropertiesConfiguration.java 

 

4. JavaMailSender 코드 작성

메일은 보내는 코드 JavaMailSender 의 send 에 preprator 를 넘겨주면 된다.

(여러 방식이 있지만 preprator 넘기는게 가장 편한 것 같다.)

 

setText 에는 html 인지 불린값을 추가로 넣을 수 있는데, 넣게 되면 html 형식으로 메일을 보낼 수 있다.

@SpringBootApplication
class SpringMailApplication {
    
    @Bean
    fun init(mailSender: JavaMailSender) = CommandLineRunner {
        val preparator = MimeMessagePreparator { message: MimeMessage? ->
            val helper = MimeMessageHelper(message!!)
            helper.setTo("보낼 대상의 이메일 입력")
            helper.setSubject("제목입니당.")
            helper.setText("내용입니당.")
        }
        mailSender.send(preparator)
    }
}

fun main(args: Array<String>) {
    runApplication<SpringMailApplication>(*args)
}

 

실행해보면 이메일 발송이 잘 된다.

반응형

댓글