DevOps/AWS

[AWS] SES - HTML 템플릿 등록 및 이메일 보내기

깜태 2023. 1. 13. 19:26
728x90

최근에 AWS를 이용해서 이메일 서비스를 할 일이 생겼다.

해당 업무는 주로 회원가입 시 인증번호 메일이나, 비밀번호 찾기, 축하메일 발송, 뉴스레터 등이다.

간단하게 하면 html 한두줄이면 끝나겠지만, 제대로 한다면 CSS까지 적용할 수도 있다.

 

전제조건으로 AWS에 SES 서비스가 이미 등록되어있고, HTML 파일이 있다는 가정 하에서 시작한다.

(등록하는 과정이 엄청 어렵지도 않으니, 다른 글을 참조하면 좋을 것 같다)

 

1. HTML 템플릿 내 변수 확인하기

나의 경우에는 이메일로 회원가입 시 인증번호를 받는 작업이였다.

절차 상 랜덤으로 인증번호를 생성해서 보내기 때문에, 인증번호라는 변수가 필요했다.

따라서 vericiation_code 라는 변수를 만들었고, 중괄호 2개로 템플릿화시켜 나중에 보낼 때 참고되도록 만들었다.

 

... (생략)
<div class="Rectangle-159 contents">
  <span class="verification_title MEDIUM_18">
  인증번호
  </span>
  <span class="verification BOLD_28">
  {{verification_code}}
  </span>
</div>
... (생략)

 

2. HTML 템플릿 등록하기

나는 파이썬을 이용했기 때문에, boto3 이라는 편한 라이브러리가 있어서 적용하기 쉬웠다.

라이브러리에 자세한 사용법은 아래 링크에서 확인이 가능하다.

https://docs.aws.amazon.com/ko_kr/code-library/latest/ug/python_3_ses_code_examples.html

 

Amazon SES examples using SDK for Python (Boto3) - AWS SDK Code Examples

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

해당 내용을 확인해보면 템플릿을 생성하는 방법은 create_template() 라는 함수를 사용하면 된다.
Template 라는 파라미터에 4가지 값을 넣으면 되는데, 주의사항으로 html 파일을 string 타입으로 변환시켜야 한다.

간단하게 SES로 템플릿을 등록하는 코드를 만들어보았고, 그 결과는 다음과 같다.

import boto3
import json
# Create SES client
ses = boto3.client('ses')
f = open('verification.html', 'r', encoding='utf-8')
_template = 'VERIFICATION_CODE'
str_html = ""
for idx, line in enumerate(f.readlines()):
    line = line.strip()
    str_html += line
f.close()


response = ses.create_template(
  Template = {
    'TemplateName' : 'VERIFICATION_CODE',
    'SubjectPart'  : '인증번호를 입력해주세요.',
    'TextPart'     : "",
    'HtmlPart'     : str_html,
  }
)

print(response)

# 생성 확인
response = ses.get_template(
    TemplateName=_template
)
print(response)

생성한 뒤 SES 홈페이지의 템플릿으로 들어가면 아래와 같이 확인할 수 있다.

3. HTML 템플릿으로 이메일 보내기

위에서 생성된 이메일 템플릿을 바탕으로 이메일을 보내는 방법은 send_templated_email() 함수를 이용하면 된다.

당연하겠지만 이메일을 보낼 때는 보내는 사람, 받는 사람, 내용 이 필수로 적혀져 있어야한다.

send_templated_mail 함수 기준으로 그 내용은 템플릿으로 되어있기 때문에

내용에는 템플릿이 어떤 템플릿인지, 템플릿에는 어떤 변수를 담을지 적으면 되고,

해당하는 내용의 코드를 간단하게 적어보았다.

 

import boto3
import json
ses = boto3.client('ses')
_template = 'VERIFICATION_CODE'

destination = "test@test.com"
_code =123456
template_data ={"verification_code": _code}
send_args = {
            "Source": "my-name@example.com",
            "Destination": {
                "ToAddresses": [destination],
            },
            "Template": _template,
            "TemplateData": json.dumps(template_data)
        }

res = ses.send_templated_email(**send_args)
print(res)

 

 

결과

참고

만약에 비슷하게 적용했는데 이메일 전송이 되지 않는다면

변수가 잘 매칭되었는지, 인증된 메일인지 확인해보면 될 것 같다.

 

추가로 CSS를 적용하고 싶은데 CSS가 적용이 되지 않는다면,

이메일로 HTML을 적용 시에는 태그 내에 인라인으로 적용해야 되니 참고해서 HTML을 작성하면 된다.

 

참고: https://ojava.tistory.com/111

 

 

 

728x90