-
[AWS] AWS SES를 통해 보낸 이메일의 열기 클릭 반송 모니터링Computer Network 2023. 2. 12. 15:18
안녕하세요.
오늘은 AWS SES를 통해 보낸 이메일에 대해
유저가 열기, 클릭의 액션에 대한 모니터링 하는 법을 알아보겠습니다.
1. 목적
1) 수신자가 이메일을 여는 횟수 파악
2) 수신자가 이메일에 있는 링크를 클릭하는 횟수 파악
3) 이메일이 반송되는 횟수 파악
2. 사용하는 aws 기능
1) AWS SES(Amazon Simple Email Service)
- 대량으로 이메일을 전송할 수 있는 클라우드 이메일 서비스 공급자
2) AWS SNS(Amazone simple notification service)
- 수신자가 이메일을 열거나, 링크 클릭, 반송될 때마다 알림 전송
3) AWS amazone cloudwatch
- 수신자가 이메일을 열거나 링크 클릭, 반송되는 횟수 파악
SES로 이메일을 보내는 것은 필수입니다!
Q. 여기서 이메일을 대량으로 전송하고, 어느 정도 유저의 비율이 open 및 click 하는지만 알고 싶다면 ??
- amazone cloudwatch만 하셔도 충분합니다.
Q . 더 나아가 어떤 유저가 open 하고, click 했는지를 알고 싶다면 ??
- aws sns까지 추가하시면 됩니다.
여기서는 2개 모두 적용하는 방법에 대해 알아보겠습니다.
3. 적용 단계
1) Amazon SES에서 구성세트 생성
(1) amazone ses 콘솔 열기 구성/구성세트 선택 -> 세트 생성
(2) 세트 생성
- 이름 기입(다른 구성세트와 구분할 수 있는 이름 설정)
→ 세트 생성 선택
2) Amazon SNS 생성하기 ( AWS SNS가 필요 없으실 경우 skip~ )
(1) amazone sns console 열기
(2) 주제 선택
(3) 주제 페이지에서 주제 생성
(4) 주제 생성 페이지에서 아래와 같이 작성
- 세부정보 섹션(주제 생성 페이지 내)에서 유형: ”표준”를 선택
- 주제 이름에 이름을 입력.- (선택 사항) 표시 이름에 주제의 표시 이름을 입력
→ 작성 후 주제 생성 클릭
저는 여기서 선택사항은 기입하지 않았고, 이름에 "dev_ses_test1" 로 작성하였습니다.
(5) 생성한 주제의 주제 세부 정보에서 구독 생성 선택
(6) 구독 생성 페이지에서 프로토콜을 선택하고, 이메일을 기입
- 프로토콜에서 “이메일-JSON” 선택- 엔드포인트에서 알림 받으려는 이메일 입력 (수신자가 이메일을 open 및 click 할때마다 알림을 받을 실제 이메일을 기입하셔야 합니다!!)
→ 구독 생성 클릭
(7) 엔드포인트로 해당 이메일 인증 메일이 올텐데 거기서 subscribe url 클릭
엔드포인트로 지정한 이메일로 aws가 메일을 보냅니다.
해당 이메일에 있는 subscribe url을 클릭하면, 인증된 메일로 인식합니다.이메일 확인 전 ) 상태가 '확인 대기 중'으로 표시
이메일 확인 후) 상태가 '확인됨'으로 변경됨.
여기까지가 sns 주제를 만드는 방법입니다.
3) AWS SES 구성에 SNS 정보가 전송 될 수 있도록 부착하기 ( AWS SNS가 필요 없으실 경우 skip ~ )
(1) 새로 만든 SNS 정보를 이벤트 대상에 추가하기
AWS SES console 창으로 이동 -> 구성 세트 -> 새로 만든 구성 클릭 -> 이벤트 대상 탭 ->“대상 추가” 선택
(2) 이벤트 유형에서 하드 바운스, 오픈 및 클릭 선택 → 다음 클릭
(3) 새로 만든 SNS 정보를 대상으로 지정하기
- 대상 유형에서 amazone sns 선택
- 이름에 sns 대상 이름 입력 (구분할 수 있는 이름으로 지정합니다.)
- sns 주제에서 새로 생성한 amazone sns 주제 선택
→ 다음 선택
→ 대상 추가 선택
4) AWS SES 구성에 Cloudwatch 부착하기
(1) cloudwatch를 이벤트 대상에 추가하기
ses console → 구성/구성세트 선택 → 생성한 구성 세트 선택 → 이벤트 대상 → 대상 추가 선택
(2) 이벤트 유형 : 하드 바운스, 오픈 및 클릭 선택 → 다음 클릭
(3) 새로 만든 SNS 정보를 대상으로 지정하기
- 대상 유형 : amazone cloudwatch 선택
- 이름: cloudwatch 대상 이름 입력
- 값 소스 : message tag
- 차원 이름 : cloudwatch에서 이 지표에 대해 사용할 이름 입력
→ 다음 선택
→ 대상 추가 선택
여기까지가 AWS SES 구성에 SNS와 cloudwatch를 부착하는 방법입니다!
5) 테스트 이메일을 보내기 및 sns, cloudwatch 지표 확인
그러면, 실제로 제대로 동작하는지 알아봐야겠죠 ??
aws ses는 친절하게 확인할 수 있도록 이메일 열기, 클릭 및 반송에 대한 테스트를 위한 메일박스 시뮬레이터가 있습니다~!
(1) amazon ses 콘솔 열기
(2) 구성 / 확인된 자격증명 선택 → 인증된 도메인 중에 하나 선택 → 테스트 이메일 전송 선택
(3) 메세지 세부 정보
- 이메일 형식 : 원시(raw)
- 발신 주소 : 발신할 이메일 주소 입력
- 시나리오 : 확인하고자 하는 목적에 따라 시나리오가 달라짐 (여기서는 열기 및 클릭 시나리오 진행)
- 열기 및 클릭 시나리오 : 사용자 지정
- 반송 시나리오 : 반송
- 메세지
X-SES-CONFIGURATION-SET: **만든_구성_세트_이름** X-SES-MESSAGE-TAGS: **구성 세트에서 CloudWatch 대상에 대해 입력한 차원 이름=기본값** From: [test-verified-domain@example.com](mailto:test-verified-domain@example.com) To: [test-recipient@example.com](mailto:test-recipient@example.com) Subject: Test email Content-Type: multipart/alternative; boundary="----=_boundary" -----=_boundary Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit This is a test email. <a href="[https://aws.amazon.com/](https://aws.amazon.com/)">Amazon Web Services</a> ------=_boundary
-> 테스트 이메일 전송
(4) Amazon SNS 알림과 CloudWatch 지표를 확인
📍 sns 알림
- 테스트 메일을 확인 후, sns 주제 구독의 엔드포인트로 설정된 이메일에 sns 알림이 간다.
아래 사진을 보면 사용자가 open 했을 경우, 이메일로 잘 날라오는 것을 확인 할 수 있다.
📍 cloudwatch
- cloudwatch 콘솔 → 지표 클릭 → 모든 지표 에서 ses
6) 실제 이메일을 보내기
실제 email 보낼때, configuration set에 부착하고자 하는 구성세트의 이름을 적기.
예시 코드)
import { SES } from "aws-sdk"; const sesConfig = { accessKeyId: "~" secretAccessKey: "~", region: "~", }; const sesAws = new SES(sesConfig); const sourceEmail = "~~@~~"; const params: AWS.SES.SendTemplatedEmailRequest = { Destination: { ToAddresses: ['~'], }, Source: sourceEmail, Template: '' TemplateData: '', ConfigurationSetName: 'dev-test', // 추가 }; await sesAws.sendTemplatedEmail(params).promise();
차근차근 따라오시면,
어렵지 않고 쉽게 적용하실 수 있습니다 :)
감사합니다.
'Computer Network' 카테고리의 다른 글
[Computer Network] AWS Route53 (dns) 레코드 유형 (0) 2022.12.11 [Computer Network] Http methods & status code (0) 2022.11.06 [Computer Network] HTTP (0) 2022.11.06 [Computer Network] URI와 Web Browser (0) 2022.10.30 [Computer Network] 인터넷 통신 (0) 2022.10.30