[Django] AWS-SES를 이용하여 메일 발송하기(1) - AWS-SES 설정

dj-yang·2021년 7월 13일
1

django

목록 보기
1/7
post-thumbnail

서론

개인 프로젝트로 개발자 커뮤니티(stackoverflow와 유사한 질문형 커뮤니티)를 개발하고 있다.

회원가입과 관련해서 만약 사용자가 회원가입을 한다면 이메일 필드에 적은 이메일로 계정 확인용 메일을 보내는 기능을 구현하려고 이메일 발송에 관련해서 검색해보기 시작했다.

검색해본 결과 장고에서 가장 많이 사용하는 것은 django-ses라는 패키지였다. 문서를 살펴보았을 때 아래와 같은 이점이 있다고 한다.

  • You don't want to maintain mail servers.
  • You are already deployed on EC2 (In-bound traffic to SES is free from EC2 instances).
  • You need to send a high volume of email.
  • You don't want to have to worry about PTR records, Reverse DNS, email whitelist/blacklist services.
  • You want to improve delivery rate and inbox cosmetics by DKIM signing your messages using SES's Easy DKIM feature.
  • Django-SES is a truely drop-in replacement for the default mail backend. Your code should require no changes.

필요한 기능은 단순히 내가 원하는 메일을 발송만 하는 기능이고 대부분 aws 자체적으로 해결 가능했기 때문에 매력적으로 느껴지지는 않았다.


메일서버 설정하기

이 글은 단순히 AWS SES DOCS를 따라한 것 뿐이다. 이것을 따라하면서 aws가 확실히 사용자 친화적으로 엄청난 노력을 하고 있다고 느껴졌다.

도메인 인증

이메일 발송 기능을 구현하려고 하는 개발자라면 이미 도메인은 있을 것이라고 예상하고 따로 말을 안했지만 메일을 발송하려면 본인 소유의 도메인이 필요하다. 본인 소유의 도메인으로 아래와 같은 절차를 진행한다.

  1. AWS Simple Email Service 클릭
  2. 왼쪽 사이드 바에서 Domains 클릭
  3. 상단에 Verify a New Domain 클릭
  4. 입력창에 본인 소유의 도메인 입력 (example.com)
  5. Generate DKIM settings 체크
  6. Verify this Domain 클릭
  7. 생성된 정보를 DNS에 입력(본인은 AWS route 53 사용)

도메인 인증이 완료되었다!

DKIM settings

aws를 사람들이 왜 쓰는 지 느꼈던 것 중의 하나가 도메인 인증에 있는 DKIM settings 체크이다. DKIM(DomainKeys Identified Mail)은 모든 메일의 헤더에 암호화를 진행하여 메일의 변조를 막아주는 역할을 한다. 잘 모르겠지만 그냥 좋은 것 같다..

이런 설정을 버튼 하나만 체크하니 저절로 구현이 되었다..(물론 그렇기 때문에 비싼감이 있는 것도 사실이다)

배포 환경 접근 요청

이메일 인증을 마치고 나면 우선 우리의 메일 서버(aws 메일 서버)는 샌드박스라는 제한된 기능만 제공한다. 이를 실제 운영하는 웹 페이지처럼 동작하려면 Moving out of the Amazon SES sandbox의 가이드라인을 따르면 된다. 샌드박스에서는 하루에 보낼 수 있는 메일량, 1초에 보낼 수 있는 메일 수, 확인된 수신자에게만 메일 발송 등으로 설정이 되어있어서 실제 운영에서는 사용이 어렵지만 우선은 이메일 발송에 설정에 신경을 써야되니 이 환경을 적극 활용할 생각이다.

도메인 인증 시스템 구성

SPF나 DKIM 같은 인증 시스템을 구성한다.

SPF(Sender Policy Framework) : 메일서버 정보를 사전에 DNS에 공개 등록함으로써 수신자로 하여금 이메일에 표시된 발송자 정보가 실제 메일서버의 정보와 일치하는지를 확인할 수 있도록 하는 인증기술

우리는 이미 aws에서 DKIM 설정을 해주었다.

SMTP 자격 증명 생성

메일을 발송하려면 SMTP를 이용해야 한다.

SMPT : 간이 우편 전송 프로토콜, 메일을 작성해서 보내시면 그 메일은 SMTP 서버(보내는 메일서버, Outgoing mailserver)로 일단 전송되며 이 SMTP 서버에서 SENDMAIL 프로그램을 구동하여 해당 메일 주소로 메일을 보내게 됩니다.

AWS SES에서는 SMTP 설정도 굉장히 쉽게 가능하다.

  1. AWS Simple Email Service 클릭
  2. SMTP Settings 클릭
  3. Create My SMTP Credentials 클릭
  4. IAM 유저 네임 설정
  5. 오른쪽 하단에 생성 클릭
  6. 제공되는 Access Key ID와 Access Key PW 따로 저장
  7. 생성이 완료되면 Server Name : email-smtp.ap-northeast-2.amazonaws.com 형태로 내가 사용할 SMTP 서버가 보여진다.(이미 AWS에서는 SMTP 서버 또한 구현되어 있다. 우린 그냥 이용만 하면 된다.)

endpoint 연결

장고 앱에서 진행하면 된다.


다음 글에서는 장고 기본 이메일 벡엔드 설정을 이용하여 엔드포인트를 연결하고 메일 발송을 테스트 해볼 생각이다.

혹시 틀린 부분이 있다면 지적해주세요. 감사합니다.

[Django] AWS-SES를 이용하여 메일 발송하기(2)

profile
비전공자가 고통받으며 개발합니다

0개의 댓글