AWS SES Spring Boot에서 템플릿과 함께 사용해보기

내가 몰랐던 것들·2022년 3월 22일
1
post-thumbnail

AWS SES란?

Amazon Simple Email Service

Amazon Simple Email Service (SES) is a cloud-based email service that provides cost-effective, flexible and scalable way for businesses of all sizes to keep in contact with their customers through email.

AWS에서 제공하는 클라우드 기반 이메일 송수신 서비스입니다.
최근 프로젝트에서 처음 사용해봤는데, 복습차 사용방법을 정리해봅니다.

사전준비

  • aws 계정 (프리티어도 가능)

STEP 1 : AWS 계정 제한 풀기

처음 SES 서비스를 사용하려고 보면 Sandbox 상태로 서비스를 사용할 수 없습니다. AWS측에 풀어달라는 요청을 보내야 합니다.

1. AWS Support Center 접속 > Create Case 선택

2. Service limit increase 선택 후 Limit type> SES 선택


그리고 요청사항(샌드박스 해제)을 쓰면 되는데 이유를 최대한 자세하게 써주셔야 합니다. 저는 개인적인 공부를 위해서라고 썼다가 반려당해서 두번 썼습니다..
필요하다면 샌드박스 해제와 함께 기본 발송량 제한(하루 200통)도 같이 풀어달라 요청하세요.

step 2부터는 제한이 풀린 후 부터 진행하시면 됩니다.

STEP 2 : 도메인 인증받기

1. AWS SES > Verified identities에 접속 합니다


2. 자신의 이메일 계정으로 도메인을 생성합니다.


가지고 계신 도메인이 있으면 그걸 사용하셔도 괜찮습니다.

STEP 3 : AccessKey 발급받기

1. 프로필 > 보안 자격 증명 > 액세스 키


이곳에서 새 액세스 키를 생성할 수 있습니다.
처음 생성할때 액세스키와 시크릿키를 발급해주는데, 시크릿키는 발급받을때만 볼 수 있으므로 따로 저장해놓는 편이 좋습니다.
AWS에서도 강조하는 부분이지만 액세스키는 절대 공유해선 안됩니다!

STEP 4 : 의존성 추가 및 Configuration 설정

이제 스프링에 SES 설정을 추가해 줍시다.

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk-ses</artifactId>
  <version>1.12.144</version>
</dependency>

pom.xml

aws.ses.access-key=액세스 키
aws.ses.secret-key=시크릿 키

applicant.properties

@Configuration
public class AwsSesConfig {

    @Value("${aws.ses.access-key}")
    private String accessKey;

    @Value("${aws.ses.secret-key}")
    private String secretKey;

    @Bean
    public AmazonSimpleEmailService amazonSimpleEmailService() {
        final BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKey, secretKey);
        final AWSStaticCredentialsProvider awsStaticCredentialsProvider = new AWSStaticCredentialsProvider(
                basicAWSCredentials);

        return AmazonSimpleEmailServiceClientBuilder.standard()
                .withCredentials(awsStaticCredentialsProvider)
                .withRegion("설정한 지역")
                .build();
    }
}

STEP 5 : Spring에서 SES 사용하기 + 템플릿 커스텀 하기

1. Email 템플릿 html 작성하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta CHARSET="UTF-8">
</head>
<body>
<div class="container-fluid">
    <h2 class="header">이메일 인증</h2>
    <hr>
    <div>
        <br> 회원가입 진행을 위한 인증번호를 보내드립니다.
        <br> 아래 보이는 인증번호를 화면에 입력해 주세요
        <br> 감사합니다.
    </div>
    <div style="">
        {{number}}
    </div>
</div>

중괄호로 두번 감싼 부분은 변수가 들어갈 부분입니다.
style은 head부분에 넣어주어도 되지만 네이버에서는 적용이 안돼 태그에 작성하였습니다.

2. AWS에 작성한 템플릿 객체 전송하기

보통 amazonSimpleEmailService 객체의 sendEmail 메소드를 사용하지만 저는 커스텀한 html 파일을 이용해서 보내줄 것이기 때문에 sendTemplatedEmail 메소드를 사용했습니다.

@Autowired
private AmazonSimpleEmailService amazonSimpleEmailService;

...
Template template = new Template();
template.setTemplateName("number"); // 템플릿 이름
template.setSubjectPart("인증번호 입니다."); // 메일 제목
template.setHtmlPart(content); // 작성한 html(String 형식으로)
template.setTextPart(null); // html이 지원 안될때 형식

 CreateTemplateRequest request = new CreateTemplateRequest().withTemplate(template);
 amazonSimpleEmailService.createTemplate(request);

마지막 createTemplate함수를 실행시키면 SES Email templates 에 우리가 추가한 이메일 템플릿이 생성됩니다.

3. SendTemplatedEmailRequest 객체 생성하기

이제 본격적으로 이메일을 보내봅시다.

List<String> receivers = new ArrayList<>();
receivers.add(email);

Destination des = new Destination();
des.setToAddresses(receivers);

Map<String, String> data = new HashMap<>();
data.put("number", "인증번호");
String templateData = new Gson().toJson(data);

SendTemplatedEmailRequest emailRequest = new SendTemplatedEmailRequest();
emailRequest.setTemplate("authNo");
emailRequest.setDestination(des);
emailRequest.setSource("ses에 등록한 송신자 이메일");
emailRequest.setTemplateData(templateData);

amazonSimpleEmailService.sendTemplatedEmail(emailRequest);

결과

👍

0개의 댓글