728x90
    
    
  SES 설정
1. AWS 설정
- SES 자격 증명
- 발신자 Email 입력 후 Email 인증
 
- IAM
- SES 사용키 발급 (access-key, secret-key)
- 권한 : AmazonSESFullAccess
 
2. Spring Boot 설정
- Dependency
- implementation("software.amazon.awssdk:sesv2:2.28.16")
- implementation("com.amazonaws:aws-java-sdk-ses:1.12.773") // 조만간 지원 X
- implementation("org.springframework.boot:spring-boot-starter-thymeleaf") // 메일 템플릿 사용 시 필요
 
- Config
- SesConfig 설정
 
@Bean
fun sesV2Client(): SesV2Client {
    val credentials = AwsBasicCredentials.create(accessKey, secretKey)
    val provider = StaticCredentialsProvider.create(credentials)
    return SesV2Client.builder()
        .credentialsProvider(provider)
        .region(Region.AP_NORTHEAST_2)
        .build()
}
// thymeleaf 설정
@Bean
fun setTemplateEngine(springResourceTemplateResolver: SpringResourceTemplateResolver): TemplateEngine {
    val templateEngine = SpringTemplateEngine()
    templateEngine.addTemplateResolver(springResourceTemplateResolver)
    return templateEngine
}
- Service 생성
@Service
class SesService(
    private val sesV2Client: SesV2Client,
    private val templateEngine: SpringTemplateEngine
) {
    private val log = LogFactory.getLog(SesService::class.java)
    private val from = "발신자 이메일"
    // 메일 전송
    fun sendEmail(variables: Map<String, Any>) {
        val content = templateEngine.process("index", createContext(variables))
        val toAddress = listOf("수신자 이메일")
        log.info(":::: Send Email Result ::::")
        try {
            sesV2Client.sendEmail(createSendEmailRequest(toAddress, "Send Test Title", content))
            log.info("Success Send Email : ${toAddress.size}")
        } catch (e: SesV2Exception) {
            log.error(e.awsErrorDetails().errorMessage())
        }
    }
    // 템플릿 생성
    private fun createContext(variables: Map<String, Any>): Context {
        return Context().apply { setVariables(variables) }
    }
    // 이메일 Request 생성
    private fun createSendEmailRequest(
        toAddress: List,
        title: String,
        contentHtml: String
    ): SendEmailRequest {
        val destination = Destination.builder()
            .toAddresses(toAddress)
            .build()
        val subject = Content.builder()
            .data(title)
            .build()
        val htmlContent = Content.builder()
            .data(contentHtml)
            .build()
        val body = Body.builder()
            .html(htmlContent)
            .build()
        val message = Message.builder()
            .subject(subject)
            .body(body)
            .build()
        val emailContent = EmailContent.builder()
            .simple(message)
            .build()
        return SendEmailRequest.builder()
            .destination(destination)
            .content(emailContent)
            .fromEmailAddress(from)
            .build()
    }
}
※ 위 코드 실행 시 에러 발생 (정지된 계정 또는 400 에러)
* 아래 링크 3부의 리전을 설정하면 메일이 정상 전송됩니다. AWS 400 에러 시 설정 문서
728x90
    
    
  'AWS' 카테고리의 다른 글
| 로드밸런스 알고리즘 종류 (0) | 2023.07.05 | 
|---|---|
| Simple Queue Service_Spring Boot 2.x (0) | 2023.04.16 | 
| Simple Queue Service_이론 (0) | 2023.04.16 | 
| Spring Boot, Ubuntu, Nginx 배포 방법 (0) | 2023.04.16 |