정구리의 우주정복

[Kotlin] 구글 SMTP 연결 및 메일 전송 (2025.02.20 기준) 본문

JAVA/STUDY

[Kotlin] 구글 SMTP 연결 및 메일 전송 (2025.02.20 기준)

Jungry_ 2025. 2. 20. 22:58
반응형

 

거지같은 메일 전송

 

(1) 구글 설정

Gmail 로 이동 모든 설정보기 클릭 !!!

 

 

이거 설정 켜기

 

(2) 구글 2단계 인증 켜기

 

보안 > 2단계 인증 들어가서 켜기 !!!

 

다시 와서 구글 앱 비밀번호 검색 후 만들기

 

만들어진 앱 비번 복사 고고고 !!!!!!!!

 

(3) Kotlin 으로 돌아와서 

 spring: 
  mail:
    host: smtp.gmail.com
    port: 587
    username: 구글 이멤일
    password: 앱비밀번호
    properties:
      mail:
        smtp:
          auth: true
          timeout: 5000
          starttls:
            enable: true

 

application.yml 에 이렇게 작성해준다

 

(4) gradle 설정 

 

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

 

이거 추가 고고

 

(5) 코드작성

 

package com.example.toygry.routinmoa.user.adapter.out.persistence

import com.example.toygry.routinmoa.user.adapter.out.persistence.entity.EmailVerificationEntity
import com.example.toygry.routinmoa.user.adapter.out.persistence.repository.EmailVerificationRepository
import com.example.toygry.routinmoa.user.adapter.out.persistence.repository.UserRepository
import com.example.toygry.routinmoa.user.application.port.out.SignPort
import com.example.toygry.routinmoa.user.domain.vo.SignResult
import jakarta.mail.internet.MimeMessage
import jakarta.transaction.Transactional
import org.springframework.mail.javamail.JavaMailSender
import org.springframework.mail.javamail.MimeMessageHelper
import org.springframework.stereotype.Component

@Component
class SignAdapter(
    val emailVerificationRepository: EmailVerificationRepository,
    private val mailSender: JavaMailSender
): SignPort {
    

    @Transactional
    override fun sendEmail(email: String, type: String): SignResult {
        // 코드 생성
        val newCode = generateCode()

        // 기존거 지우고
        emailVerificationRepository.deleteByEmail(email)

        val verifyInfo = EmailVerificationEntity(email = email, code = newCode)
        emailVerificationRepository.save(verifyInfo)

        sendVerificationEmail(email,newCode,type)

        return SignResult(true, "이메일 전송 완료")
    }

    private fun generateCode(): String {
        return (100000..999999).random().toString() // 6자리 숫자 랜덤 생성
    }
    
    
// 여기부터 작성 !!!
    fun sendVerificationEmail(email: String, code: String, type: String) {
        val message: MimeMessage = mailSender.createMimeMessage()
        val helper = MimeMessageHelper(message, true)

        helper.setTo(email)
        helper.setSubject("Your Verification Code")
        helper.setText(
            """
            <html>
                <body>
                    <h3>Your verification code</h3>
                    <p>Your verification code is: <b>$code</b></p>
                    <p>Please enter this code to verify your email.</p>
                </body>
            </html>
            """.trimIndent(),
            true
        )

        mailSender.send(message)
    }
}

 

sendVerificationEmail 참고해서 만들고 실행하면 

 

와 ~ 메일 간다 ~~

반응형
Comments