AWS SES 이것저것 정리

파워소동·2023년 7월 30일
1

AWS

목록 보기
3/4
post-thumbnail

Amazon Simple Email Service(AWS SES)

Amazon Simple Email Service(SES)는 aws의 이메일 서비스이다.
이 글은 SES 관련해서 이것저것 정리한 글이다.


SES 전송 할당량

  • 발신 할당량
    24시간 동안 보낼 수 있는 최대 이메일 수. 이메일 전송을 시도할 때마다 Amazon SES 에서 지난 24시간 내에 보낸 이메일 수를 확인. 지난 24시간 동안 보낸 이메일 이 일일 최대치보다 낮으면 전송 요청이 수락되고 이메일이 전송된다.
    메시지 전송이 계정의 일일 최대치를 초과하면 Amazon SES 에 대한 호출이 거부된다.
  • 발신 속도
    Amazon SES가 초당 수락할 수 있는 이메일 수. 잠깐 동안 이 할당량을 초과할 수도 있지만 장기적으로는 초과할 수 없다.
    💡 Amazon SES 에서 메시지를 수락하는 속도는 계정의 최대 전송 속도보다 느릴 수 있다.
    → [AWS Support 센터](https://console.aws.amazon.com/support/home#/)에서 [create case]로  할당량 증가를 요청할 수 있음.

https://docs.aws.amazon.com/ko_kr/ses/latest/DeveloperGuide/manage-sending-quotas.html


SES SANDBOX

도용 및 침해를 방지하기 위해서 맨 처음 구성된 제약이 있는 환경을 말한다.

  • 인증된 메일에만 발송하는 규칙이 있음
  • 하루에 200건까지만 발송 가능
  • 1초에 1건만 발송 가능

실제 운영 서비스에 SES를 본격적으로 적용하려면 SANDBOX 해제가 필요하다.

→ 정상적인 메일 발송을 하기 위해서는 SANDBOX해제 필요(참고)24시간 내 회신된다.
참고된 링크처럼 SANDBOX만 해제를 할 수도 있지만 일일전송량, 초당 전송량 limit을 수정하면서 SANDBOX해제를 동시에 요청 할 수도 있다.

추가로, support에서 description작성시 요구한 질문에 대한 답변이 없으면 요청이 거부된다!


SES 반송률 관리

AWS는 계정의 반송률을 5% 미만으로 유지할 것을 권장한다. 계정의 반송률이 10%를 넘으면 해당 계정의 이메일 전송 기능을 AWS에서 일시 중지 시킬 수 있다. 또한 불만 제기 비율이 0.1% 이상인 경우에도 이메일 발송을 일시 중지 시킬 수 있다.

반송의 원인은 여러가지가 있을 수 있다.

  • 수신자의 주소가 존재하지 않는 경우.
  • 수신자의 이메일 공급자가 해당 도메인 또는 IP 주소에서 보낸 이메일을 차단한 경우

따라서 반송의 원인이 되는 이메일 주소들을 관리를 하는 것이 필요하다. SNS(Amazon Simple Notification Service)를 사용해서 반송되는 이메일에 대한 정보를 받고 관리할 수 있다.

[AWS SNS를 이용한 SES 반송메일 알림구성]

SNS로 반송되는 이메일에 대한 관리를 아래처럼 할 수 있다.

  • 반송률을 늘리는 주소로 이메일 전송 중지.
  • 반송 메일 및 수신 거부 모니터링 시스템 구현
  • 반송률 증가 또는 급증의 근본적인 원인 해결
    1. 잘못된 수신자에게 메일을 발송하는 경우 반송이 될 수 있다. 잘못되었거나 오래된 수신자 목록을 사용하는 경우 이러한 상황이 발생할 수 있습니다. 메시지를 보내기 전에 발송 목록에서 잘못된 이메일 주소를 제거해야 한다. 이메일 목록 관리에 대한 자세한 내용은 Amazon SES 모범 사례: 목록 관리를 위한 상위 5가지 모범 사례를 참조.
    2. 메일 서비스 업체는 평판 지표에 따라 이메일을 보낼 때 사용되는 IP 주소를 차단할 수 있다. 수신 거부 수가 많은 경우 메일 서비스 업체가 메시지를 차단할 수 있다. 메일 서비스 업체의 지침에 따라 원인을 제거한다.
    3. 메일 서비스 업체가 타사 블랙리스트를 사용하여 이메일을 필터링할 수 있다. 메일이 차단된 후에도 계속해서 메일을 전송하면 반송률이 증가할 수 있다. 메일 서비스 업체 또는 블랙리스트 공급처에 문의하여 메시지가 차단 목록에 등록되는 이유에 대한 정보를 얻고 관리를 해주어야 한다.

AWS SES에서는 반송 메일에 대한 시뮬레이션을 할 수 있다. 반송 메일에 대한 SNS등을 만들고 시뮬레이션을 해볼 수 있다.(참고)
→ 메일박스 시뮬레이터 주소로 테스트 할 경우 반송률, 불만제기 비율에는 영향없음.

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ses-high-bounce-rate/


AWS SES 메일 발송

Amazon SES를 통해 프로덕션 이메일을 보내려면 아래와같은 방법이 있다.
1. SMTP(Simple Mail Transfer Protocol) 인터페이스
2. Amazon SES API(SDK를 사용하는 방법이 여기에 해당됨.)

1. SMTP

Amazon SES SMTP 인터페이스를 사용하여 이메일을 전송하면 SMTP 지원 프로그래밍 언어, 이메일 서버 또는 애플리케이션을 사용할 수 있다고 하는데 이 부분은 잘 모르겠다. 기존에 이메일 서버를 가지고 있는 사용자의 경우에는 SMTP를 구성해서 메일을 보낼 수 있다는 걸까?

SMTP credentials 발급이 필요하며, JAVA로 개발시 JavaMail api 1.5 이상이 요구된다.

Amazon SES SMTP 인터페이스를 사용하여 이메일 전송

2. SES API

아래와 같은 방법들로 SES API를 호출할 수 있다.

  1. 직접 HTTPS 요청 만들기
    가장 고급 방법이며, 요청의 인증 및 서명을 수동으로 처리한 다음 요청을 수동으로 구성해야 합니다. Amazon SES API에 대한 자세한 내용은 API v2 참조의 환영 페이지를 참조하십시오.

  2. AWS SDK 사용 (제일 대중적인듯)
    AWS SDK를 사용하면 Amazon SES를 포함하여 여러 AWS 서비스의 API에 쉽게 액세스할 수 있습니다. SDK를 사용할 경우 인증, 요청 서명, 재시도 로직, 오류 처리 및 기타 하위 수준 기능이 알아서 처리되므로 고객을 만족시킬 애플리케이션 구축에 집중할 수 있습니다.

  3. 명령줄 인터페이스 사용
    AWS Command Line Interface은(는) Amazon SES용 명령줄 도구입니다. 또한 PowerShell 환경에서 스크립팅하는 사용자를 위해 AWS Tools for Windows PowerShell도 제공합니다.

2-1. AWS SES SDK

서비스에서 이메일을 보낼때 각자 환경에 맞는 SES SDK를 사용해서 이메일을 발송해야한다.

JAVA의 경우 SDK에서 제공하는 메일 발송 class에는 2가지가 있다.

  • (동기) AmazonSimpleEmailService
  • (비동기) AmazonSimpleEmailServiceAsync (AmazonSimpleEmailService를 상속받음)

트래픽이 많은 경우 AmazonSimpleEmailServiceAsync을 사용해 메일을 발송하는 것이 대응하기에 더 좋을 것 같다.


도메인

  • 사용자 지정 MAIL FROM 도메인을 사용하는 이유

    https://docs.aws.amazon.com/ko_kr/ses/latest/DeveloperGuide/mail-from.html

    기본적으로 Amazon SES 를 통해 보내는 메시지는amazonses.comMAIL FROM 도메인으로. 기본 MAIL FROM 도메인은 이메일을 전송한 애플리케이션 (이 경우) 과 일치하므로 Sender Policy Framework (SPF) 인증은 이 메시지를 성공적으로 검증합니다.

    대부분의 발신자에게 이 인증 수준이면 충분하지만, 일부 발신자의 경우 MAIL FROM 도메인을 소유하고 있는 도메인으로 설정하는 것을 선호합니다. 사용자 지정 MAIL FROM 도메인을 설정하면 이메일이 Domain-based Message Authentication, Reporting and Conformance(DMARC)를 준수할 수 있습니다. DMARC를 통해 발신자의 도메인은 해당 도메인에서 발송된 이메일이 하나 이상의 인증 시스템에 의해 보호되고 있음을 나타낼 수 있습니다.

    DMARC 검증은 Sender Policy Framework(SPF) 및 DomainKeys Identified Mail(DKIM)을 사용하는 두 가지 방법을 이용해 수행할 수 있습니다. SPF 검증을 위해서는 From 주소의 도메인이 MAIL FROM 도메인과 일치해야 하므로 SPF를 통해 DMARC를 준수하는 유일한 방법은 사용자 지정 MAIL FROM을 사용하는 것입니다. 사용자의 고유한 MAIL FROM 도메인을 사용하면 SPF, DKIM 또는 두 가지를 모두 사용하여 유연하게 DMARC 검증을 수행할 수 있습니다.


전체 도메인을 확인하면 해당 도메인의 모든 이메일 주소를 확인하게 되므로 해당 도메인의 이메일 주소를 개별적으로 확인할 필요가 없다. 예를 들어, 도메인 example.com을 확인하면 user1@example.com, user2@example.com을 비롯하여 example.com을 사용하는 모든 주소에서 이메일을 보낼 수 있다.

도메인 인증 : TXT Record

DKIM 인증 : CNAM Record

Email 수신 : MX Record (필요에 따라)

https://docs.aws.amazon.com/ko_kr/ses/latest/dg/creating-identities.html#just-verify-domain-proc
https://docs.aws.amazon.com/ko_kr/ses/latest/dg/send-email-authentication-dkim-easy.html


Template

  • Amazon SES 계정당 최대 10,000개의 이메일 템플릿을 생성할 수 있다.
  • 각 템플릿의 최대 크기는 텍스트 부분과 HTML 부분을 포함하여 500KB.
  • 각 템플릿에 대체 변수를 무제한으로 포함시킬 수 있다.
  • 템플릿 렌더링 오류 발생시 status와 무관하게 발송이 안 된다. amazonSimpleEmailService.testRenderTemplate 메서드로 렌더링 체크를 할 수 있다.
  • SendBulkTemplatedEmail로 한 번에 최대 50개의 대상에 이메일 발송 가능.

템플릿 사용시 주의점

  • base64 사용X. CDN 등을 사용해서 외부 링크로 src 를 넣어주어야 한다.

  • SVG 도 외부 링크로 넣어봤는데 처리가 잘 안되었다. 되도록 비트맵 형식의 확장자만 지원하는듯 하다(ex : PNG).

  • 네이버는 필터링으로 height, line-height 를 없에버린다.

  • a.button 형식의 css 셀렉터를 썼는데, 네이버 자체 스타일 때문에 겹쳐서 제대로 안 나올 수 있음.

  • overflow 는 모바일에서 안나올 수 있음. 되도록 지양.


SES 발송 모니터링

  • 전송 - Amazon SES 에 대한 호출이 성공했고 이메일 전송을 시도합니다.
  • 거부 - Amazon SES 가 이메일을 수락했으나 이메일에 바이러스가 포함되어 있어서 거부했습니다. Amazon SES 이메일을 수신자의 메일 서버로 전송하지 않았습니다.
  • 반송 메일 - 수신자의 메일 서버가 이메일을 영구적으로 거부했습니다. 이 이벤트는 하드 반송에 해당합니다. 소프트 바운스는 Amazon SES 에서 일정 시간 동안 재시도한 후 이메일을 배달하는 데 실패한 경우에만 포함됩니다.
  • 수신 거부 - 이메일이 수신자에게 성공적으로 배달되었습니다. 수신자가 이메일을 스팸으로 표시했습니다.
  • 배달 - Amazon SES 가 이메일을 수신자의 메일 서버로 성공적으로 배달했습니다.
  • 열기 - 수신자가 메시지를 수신하여 자신의 이메일 클라이언트에서 열었습니다.
  • 클릭 - 수신자가 이메일의 링크를 1개 이상 클릭했습니다.
  • 렌더링 오류 - 템플릿 렌더링 문제로 인해 이메일이 전송되지 않았습니다. 이 이벤트 유형은 SendTemplatedEmail 또는 SendBulkTemplatedEmail API 작업을 사용하여 이메일을 전송할 때만 발생합니다. 이 이벤트 유형은 템플릿 데이터가 누락되었을 때 또는 템플릿 파라미터와 데이터 사이에 불일치가 있을 때 발생할 수 있습니다.
  • 배송 지연 - 일시적인 문제가 발생하여 수신자에게 이메일을 전송할 수 없습니다. 예를 들어 수신자의 받은 편지함이 가득 찼거나 이메일 수신 서버에 일시적인 문제가 발생했을 때 전송 지연이 발생할 수 있습니다.

SES 전송 활동 모니터링

이벤트 게시를 위한 CloudWatch 이벤트 대상 설정


요금

https://aws.amazon.com/ko/ses/pricing/

1개의 댓글

comment-user-thumbnail
2023년 7월 30일

공감하며 읽었습니다. 좋은 글 감사드립니다.

답글 달기