Gmail SMTP + spring-boot-starter-mail

공부는 혼자하는 거·2025년 5월 17일
0

Spring Tip

목록 보기
56/56

이메일 전송기능을 구현할 때, 본격적으로 쓰고싶다면 SendGrid, Mailgun, Amazon SES 같은 전문 이메일 서비스 API를 쓰는 게 좋긴 하겠지만 간단하게 쓰려면 구글 메일 서버 이용하는 게 편한듯

2단계 인증 활성화 후 앱 비밀번호 설정

구글계정 -> 보안 -> 앱 비밀번호

앱 비밀번호는 2단계 인증이 사용 설정된 계정에서만 이용할 수 있습니다.

spring:
  mail:
    host: smtp.gmail.com # 하루 최대 500통
    port: 587
    username: ****@gmail.com
    password: **** **** **** ****
    properties:
      mail:
        smtp:
          auth: true  # 사용자 인증 시도 여부
          starttls:
            enable: true
@Service
class MailService(
    private val mailSender: JavaMailSender,
    private val templateEngine: TemplateEngine,
) {

    private val log = KotlinLogging.logger {}

    fun sendSimpleMailMessage(
        to:String,
        emailDto: EmailDto
    ) {
        val simpleMailMessage =
            SimpleMailMessage()

        // 메일을 받을 수신자 설정
        simpleMailMessage.setTo(to)
        // 메일의 제목 설정
        simpleMailMessage.subject = emailDto.emailTemplate.subject
        // 메일의 내용 설정
        simpleMailMessage.text = "test"
        mailSender.send(simpleMailMessage)
        log.info("메일 발송 성공!")
    }

// 서버사이드 템플릿 엔진을 사용해서 email 내용을 만들고 싶을 경우

fun sendEmailTemplate(
        to: String,
        emailDto: EmailDto,
    ) {

        val output = StringOutput()
        //메일로 전송하면 인라인 방식의 css만 적용된다?
        templateEngine.render(emailDto.emailTemplate.templateTarget, emailDto.body, output)

        val mimeMessage =
            mailSender.createMimeMessage()

        val helper =
            MimeMessageHelper(mimeMessage, true, Charsets.UTF_8.name())

        helper.setSubject(emailDto.emailTemplate.subject)
        helper.setFrom(InternetAddress("test@gmail.com", "Test"))

        helper.setTo(to)
        helper.setText(output.toString(), true)

        mailSender.send(mimeMessage)
    }





profile
시간대비효율

0개의 댓글