• AWS SES 를 활용해서 이메일 보내기 :: 마이구미
    AWS 2020. 10. 11. 16:15
    반응형
    이 글은 AWS 에서 제공하는 서비스 중 하나인 "Simple Email Service" 를 다룬다.
    AWS 의 SES 는 이메일과 관련된 많은 기능들을 제공한다.
    대표적인 예로, 많은 서비스들이 사용자에게 정보를 제공하는 수단 중 하나로 이메일을 활용한다.
    이를 위해 이메일 서버를 구축하는데, SES 는 이를 쉽게 제공해준다.

     

    SES 의 기본적인 사용법을 다룰 것이다.

    예제는 serverless 프레임워크를 기반으로 진행된다.

     

    우리가 흔하게 볼 수 있는 이메일 활용 사례는 무엇인가?

    대표적으로 특정 서비스의 정보를 제공하는 수단 중 하나로 사용된다.

    페이스북을 예로 들어보자.

     

    • 마이구미님과 다른 사람들이 보낸 알림 4개가 있습니다.
    • 마이구미님이 어떤 그룹에 게시물을 올렸습니다.
    • 마이구미님이 최근에 새로운 사진을 게시했습니다.
    • 친구 추천에 마이구미 포도맛님이 추가되었습니다 

     

    이 외에도 다양하게 존재할 것이고, 각 항목들은 서로 다른 이메일 양식을 통해 보내지게 된다.

    목적에 따라, 다른 이메일 양식들이 관리되어야한다.

    이를 위해 SES 는 Email Templates 라는 기능을 제공해준다.

    의미 그대로, 이메일 템플릿으로 이것들을 저장하여 각 목적에 따라 선택하여 선택한 템플릿으로 이메일을 보낼 수 있다.

    이 흐름을 기반으로, 예제를 살펴보자. 

    예제 코드 - https://github.com/hotehrud/ses-email-templates

    예제 코드는 총 5가지의 기능을 보여주고 있다.

     

    • 특정 Email Template 형식 가져오기
    • 특정 Email Template 생성하기
    • 특정 Email Template 업데이트하기
    • 특정 Email Template 삭제하기
    • 특정 Email Template 사용하여 이메일 전송하기

     

    우선 aws-sdk 를 활용하여 SES 기능을 사용할 수 있다.

     

    const ses = new AWS.SES({
        region: awsConfig.region,
    });

     

    Email Template 을 위한 파라미터로 크게 3가지로 분류된다.

     

    • TemplateName - 이메일 템플릿 이름
    • HtmlPart - 이메일 본문
    • SubjectPart - 이메일 제목

     

    이메일 템플릿을 생성하는 예제를 통해 알아보자.

     

    app.post('/template', (req, res) => {
        const { templateName, subject, body } = req.body;
    
        const params = {
            Template: {
                TemplateName: templateName,
                HtmlPart: body,
                SubjectPart: subject,
            },
        };
    
        ses.createTemplate(params, function (err, data) {
            if (err) {
                res.send(err);
            } else {
                res.send(200);
            }
        });
    });
    

     

     

    * 자세한 코드 내용은 예제 코드에  Postman 관련 JSON 파일을 통해 확인해볼 수 있다.

    subject 는 이메일 제목으로써, 단순히 텍스트로 된 값을 지정한 모습이다.

    그리고 "{{변수명}}" 형태는 원하는 값을 동적으로 넣을 수 있다. ex) Hello 마이구미

    body 는 이메일 본문으로 HTML 코드로 작성되어야한다.

    body 또한 subject 와 같이 "{{변수명}}" 을 통해 활용할 수 있다.

     

    <a href="{{link}}" target="_blank">confirm email</a>

     

    이와 같은 형태로 POST 전송을 통해 이메일 템플릿은 만들어진다.

    그 후 생성된 이메일 템플릿을 활용하여, 원하는 사용자에게 이메일을 전송할 수 있다.

     

    app.post('/send-email', (req, res) => {
        const { templateName, sendTo, data } = req.body;
        const params = {
            Template: templateName,
            Destination: {
                ToAddresses: [sendTo],
            },
            Source: awsConfig.SENDER_EMAIL,
            TemplateData: JSON.stringify(data),
        };
    
        ses.sendTemplatedEmail(params, function (err, data) {
            if (err) {
                res.send(err);
            } else {
                res.send(200);
            }
        });
    });

     

     

    기본적인 에러 이유는 CloudWatch 에서 Metrics 에서 볼 수 있다.

    자세한 에러 로그를 위해서는 별도 작업이 필요해보였다.

    SES 에서 제공하는 Configuration Sets 기능을 활용하려했으나, 이유는 알지 못한채 실패했다...

     

    추후에 조금 더 응용된 사례 등을 다룰 예정이다.

    한가지 예를 들자면 AWS Cognito 와 같은 서비스를 이용하고 있다면, SES 를 활용하여 많은 도움을 얻을 수 있다.

    반응형

    댓글 0

Designed by Tistory.