아마존 S.E.S를 사용하여 메일 어플리케이션 만들기

2019. 12. 17. 05:54개발이야기

S.E.S

아마존 S.E.S (Simple Email Service)를 사용하면 메일 발송 및 수신에 관련된 부분을 API이용과 사용자UI만 제작하여 쉽게 메일 애플리케이션을 만들 수 있습니다.

 

아마존 S.E.S 특징

 - 아마존 서버를 통해 전송 되는 메일은 신뢰도가 높아 스팸 혹은 반송에 걸릴 확율이 낮습니다.

 - 가격 => 매월 이메일 발송 62,000건까지는 0 USD, 이후 1,000건당 0.10 USD US

 - 당연한 얘기지만 메일 발송 대행 업체 대행 대비 상당한 비용 절감이 가능합니다 => 단 애플리케이션 제작 및 지속적인 유지/보수 필요

 - AWS API를 사용하여 S.E.S를 통하여 발송/수신 하기 때문에 EC2인스턴스가 필수 입니다. 

 

제작에 앞서 간단한 메일링 발송 프로그램의 작업 흐름은 다음과 같습니다.

 

0 시작하기 앞서

1. 도메인 설정

2. DKIM 및 SPF 설정

3. 테스트메일 발송

4. 인증 요청

5. 발송 및 수신

6. 바운더리된 메일 처리

 

0. 시작하기 앞서


메일 서버를 직접 구축 해보셨거나 메일 규약에 관한 정보를 알고 있으면 더욱 도움이 됩니다.

 

 

1. 도메인 설정


아마존 AWS계정이 필요하며, S.E.S는 한국리전이 없기 때문에 US-WEST-2 오레곤리전에서 작업합니다.

EC2인스턴스가 필수이며 리전과 상관없이 API는 사용 가능합니다.

http://ses.amazon.com에 접속하신후 US-WEST-2 오레곤 리전으로 떠나십시오.

 

우측상단에서 리전을 확인 후 좌측 Identity Management => Domain => Verify a New Domain 순으로 이동하여 사용할 도메인을 인증 받습니다.

 

2. DKIM 및 SPF 설정


메일 서버를 직접 구축하면 DKIM의 경우 인증서 생성 및 사용에 대한 약간의 절차가 필요하지만 아마존 S.E.S를 사용하면 아마존 S.E.S서버에 인증서가 미리 설치되어 있으므로 DNS 레코드 변경만으로도 DKIM인증이 가능해집니다.

 

1번에서 도메인 설정을 마친후 인증 받기 버튼을 누르면 위와 같이 도메인에 DKIM설정을 할 수 있는 값이 나옵니다.

사용하고 있는 DNS서비스에 접속해서 도메인 레코드를 위와 같이 변경해 줍니다.

 

추가로 SPF를 설정하기위해 TXT type으로 아래와 같이 입력해줍니다.

"v=spf1 include:amazonses.com ~all"

설정을 마치면 다음 명령어를 입력하여 확인 할 수 있습니다.

 

 

 

덧붙여, 

SPF / 사진 KISA

SPF는...

SPF는 발송메일주소와 발송메일서버의 일치함을 확인 하기 위해 설정 합니다, 그렇지 않을 경우 수신 메일 서버에서는 정크메일일 확율을 높다 판단하여 메일 신뢰도가 매우 낮아지며, 수신메일서버의 정책에 의해서 정크메시지함에 수신되거나 반송될 수 있습니다.

 

DKIM / 사진 KISA

DKIM은...

메일헤더에 서버사이닝을 함께 보내서 수신서버측에서 사인을 비교하여 일치함을 확인 하기 위해 설정합니다. SPF와 마찬가지로 사인이 일치하지 않을 경우 정크메일함에 수신되거나 반송될 수 있습니다. 

AWS EC2를 이용하여 SENDMAIL메일 서버를 구축해 보았으나 위 두가지 모두 설정을 완료 했음에도, IP 및 도메인에 대한 신뢰도가 부족해서 인지 구글 및 다음(카카오) 에서는 두가지 모두 설정했음해도 스팸메일처리 되는것을 확인 하였습니다.

네이버의 경우는 수신메일함에 들어옴을 확인 하였습니다. 

 

3. 테스트 메일 발송


_amazonses.mail.ojtiger.com에 대한 TXT인증이 완료되면 알림 메일이 수신되고 SES웹 콘솔 상에서 테스트 메일을 보내 볼 수 있습니다.

DKIM 및 SPF가 적용되지 않았으면 수신서버 정책에 따라 스팸메일함 또는 반송될 수 있습니다.

 

4. 인증요청

인증 되기전 까지는 소량의 테스트 메일만 발송 가능하고, 실제로 사용하기 위해선 아마존 지원에 용도 및 사용 계획과 바운더리 된 메일에대한 해결방법을 서술하여(...)야 합니다.

 

5. 발송 및 수신

 

EC2 인스턴스를 생성 한 후 AWS API를 사용해서 메일을 발송합니다.

 

6. 바운더리된 메일 처리

 

시뮬레이션을 사용하여 바운더리된 메일은 S3버킷에 담도록 하고 API를 사용하여 S3버킷에 담겨진 메일을 파싱하여 다시 보내지 않도록 수정해 줘야만 바운스율을 낮출 수 있고, 아마존에서 권장하는 바운스율은 5%이하이며 그 이상일 시 일시 또는 영구적으로 보낼 수 없도록 경고 하고 있습니다. 

API를 사용하여 S3버킷에 접근 후 이메일을 파싱하여 다시 보내지 않도록 수정해줘야 합니다.