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") // 메일의 Email 템플릿 사용시 필요
- implementation("software.amazon.awssdk:sesv2:2.28.16")
- 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 생성
import org.apache.commons.logging.LogFactory
import org.springframework.stereotype.Service
import org.thymeleaf.context.Context
import org.thymeleaf.spring5.SpringTemplateEngine
import software.amazon.awssdk.services.sesv2.SesV2Client
import software.amazon.awssdk.services.sesv2.model.*
@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 = this.templateEngine.process("index", this.createContext(variables)) // "index"는 thymeleaf html 파일 이름 index.html(/resource/templates/index.html)
val toAddress = listOf( "수신자 이메일" )
this.log.info(":::: Send Email Result ::::")
try {
this.sesV2Client.sendEmail(this.createSendEmailRequest(toAddress, "Send Test Title", content))
this.log.info("Success Send Email : ${toAddress.size}")
} catch (e:SesV2Exception) {
this.log.error(e.awsErrorDetails().errorMessage())
}
}
// 템플릿 생성
private fun createContext(variables: Map<String, Any>): Context {
val context = Context()
context.setVariables(variables)
return context
}
// 이메일 Request 생성
private fun createSendEmailRequest(toAddress:List<String>,
title:String,
contentHtml:String) : SendEmailRequest {
val destination: Destination = Destination.builder().toAddresses(toAddress).build()
val sub = Content.builder().data(title).build()
val content = Content.builder().data(contentHtml).build()
val body = Body.builder().html(content).build()
val msg = Message.builder()
.subject(sub)
.body(body)
.build()
val emailContent = EmailContent.builder()
.simple(msg)
.build()
return SendEmailRequest.builder()
.destination(destination)
.content(emailContent)
.fromEmailAddress(from)
.build()
}
}
※ 위 코드 하여도 에러 가 뜰때 (정지된 계정 에러 / 400 에러)
* 아래 링크 3부의 리전을 설정 하면 메일이 보내진다.(아래 문제가 아닐수도 있다)
https://docs.aws.amazon.com/ko_kr/ses/latest/dg/monitoring-sender-reputation-pausing-account.html#monitoring-sender-reputation-pausing-account-part-3
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 |