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 |