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에서 제공하는 클라우드 기반 이메일 송수신 서비스입니다.
최근 프로젝트에서 처음 사용해봤는데, 복습차 사용방법을 정리해봅니다.
사전준비
처음 SES 서비스를 사용하려고 보면 Sandbox 상태로 서비스를 사용할 수 없습니다. AWS측에 풀어달라는 요청을 보내야 합니다.
그리고 요청사항(샌드박스 해제)을 쓰면 되는데 이유를 최대한 자세하게 써주셔야 합니다. 저는 개인적인 공부를 위해서라고 썼다가 반려당해서 두번 썼습니다..
필요하다면 샌드박스 해제와 함께 기본 발송량 제한(하루 200통)도 같이 풀어달라 요청하세요.
step 2부터는 제한이 풀린 후 부터 진행하시면 됩니다.
가지고 계신 도메인이 있으면 그걸 사용하셔도 괜찮습니다.
이곳에서 새 액세스 키를 생성할 수 있습니다.
처음 생성할때 액세스키와 시크릿키를 발급해주는데, 시크릿키는 발급받을때만 볼 수 있으므로 따로 저장해놓는 편이 좋습니다.
AWS에서도 강조하는 부분이지만 액세스키는 절대 공유해선 안됩니다!
이제 스프링에 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();
}
}
<!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부분에 넣어주어도 되지만 네이버에서는 적용이 안돼 태그에 작성하였습니다.
보통 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 에 우리가 추가한 이메일 템플릿이 생성됩니다.
이제 본격적으로 이메일을 보내봅시다.
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);