Question

AWS SES 통해서 신규가입메일, 휴먼탈퇴관련메일등등 서비스에서 메일을 발송중입니다.

근데 Bounce Rate이 8% 이상이 나와서 분석을 해보니 SNS가입시 사용하였지만 현재는 존재하지 않는 이메일들이 다수 였습니다. 
하여 이메일 발송 전 메일주소 유효성 검사를 할 수 있는 방법을 찾아보다가 아래 링크를 발견하였습니다.

https://support.bespinglobal.com/ko/support/solutions/articles/73000524748--aws-amazon-ses-probation-%EC%A4%91%EC%A7%80-%EB%B0%8F-%EB%B0%98%EC%86%A1-%EB%A9%94%EC%9D%BC

이메일 주소 유효성 체크 사이트 (3rd Party)

https://email-checker.net/

https://www.zerobounce.net/

https://www.verifyemailaddress.org/

를 활용하는 방안을 모색중이며 발송 메일에 대한 유효성 검사 방법이 궁금합니다. 


Answer


주로 SES Bounce rate를 관리하기 위해 아래 참조 링크와 같이 모니터링을 구축하여 알람 설정 후  bounce rate 증가 시 유효하지 않는 이메일 주소를 확인하여 제거 합니다.
또한 람다를 사용하여 반송률이 임계치에 도달할 시 자동으로 이메일 발송을 중지하도록 구현하실 수 있습니다.


AWS SES의 Bounce rate를 관리하는 방법 : 


  1. Amazon SNS (Simple Notification Service)를 사용하여 Bounce Notification 설정:
    Amazon SES에서 발송한 이메일이 bounce되면, Amazon SES는 이 정보를 SNS를 통해 공유합니다. 이를 위해서는 Amazon SES에서 SNS topic을 생성하고, 해당 topic을 이메일 bounce에 대한 통지에 연결해야 합니다. 이렇게 설정하면, 이메일이 bounce될 때마다 Amazon SNS가 알림을 받게 됩니다.

  2. Amazon SES Bounce Notifications 설정:
    Amazon SES 콘솔에서 이전에 생성한 SNS Topic을 bounce notifications에 연결합니다. 이렇게 하면 이메일이 bounce 될 때마다 해당 SNS Topic에 알림이 전송됩니다.

  3. SNS 알림 처리:
    SNS Topic을 구독하고 있는 서버 또는 AWS Lambda 함수를 이용하여 SNS 알림을 처리하도록 합니다. 이런 처리 과정에서, SNS 메시지에서 bounce 이벤트와 관련된 정보를 추출하고, bounce된 이메일 주소를 식별하여 이를 데이터베이스에서 제거하거나 비활성화하는 작업이 이루어집니다.
    예를 들어, 아래는 Python을 이용한 AWS Lambda 함수 예제입니다:

    import json

import boto3


def lambda_handler(event, context):

    message = json.loads(event['Records'][0]['Sns']['Message'])

    if message['notificationType'] == 'Bounce':

        bounce = message['bounce']

        for recipient in bounce['bouncedRecipients']:

            email = recipient['emailAddress']

            # 여기서 email을 데이터베이스에서 제거하거나 비활성화하는 로직을 추가합니다.


  1. CloudWatch 알람 설정:
    Amazon SES는 자동으로 bounce 및 complaint 지표를 Amazon CloudWatch에 보고합니다. CloudWatch에서 이 지표를 사용하여 bounce rate가 특정 임계값을 초과할 때 알람을 설정할 수 있습니다. 이 알람은 SNS를 통해 전달될 수 있으며, 이메일이나 SMS로 알림을 받을 수 있습니다.



Bounce rate가 증가하면 3rd party 솔루션 (전달 주신 솔루션의 링크들) 에서 유효하지 않은 이메일 주소를 확인하시면 됩니다.


3rd party 이메일 검증 서비스는 각 서비스에서 제공하는 API를 사용하여 이메일 주소의 유효성을 검증할 수 있습니다. 이 서비스들은 각각 고유한 API를 가지고 있으며, 그 API는 해당 서비스의 공식 문서에서 자세히 설명되어 있습니다.

이메일 주소가 유효한지 확인하는 기본적인 프로세스 :


  1. Bounce rate가 특정 임계값을 초과하면 (예를 들어, CloudWatch 알람을 통해), 이를 트리거로 하여 해당 이메일 주소를 확인하려는 로직을 시작합니다.

  2. 3rd party 이메일 검증 서비스의 API를 호출하여 이메일 주소를 확인합니다. 이 호출은 일반적으로 HTTP 요청을 사용하며, 이메일 주소를 파라미터로 제공합니다.

  3. 서비스는 이메일 주소의 유효성에 대한 응답을 제공합니다. 이 응답은 일반적으로 JSON 형태로, 이메일 주소가 유효한지, 혹은 어떤 문제가 있는지를 설명합니다.

  4. 이 응답을 바탕으로 해당 이메일 주소를 데이터베이스에서 제거하거나 비활성화하거나, 다른 적절한 조치를 취합니다.

Amazon SES에서 DKIM으로 이메일 인증

DKIM ( DomainKeys Identified Mail )은 특정 도메인에서 왔다고 주장하는 이메일이 실제로 해당 도메인 소유자에 의해 승인되었는지 확인하도록 설계된 이메일 보안 표준입니다. 공개 키 암호화를 사용하여 개인 키로 이메일에 서명합니다. 그런 다음 수신자 서버는 도메인의 DNS에 게시된 공개 키를 사용하여 이메일의 일부가 전송 중에 수정되지 않았는지 확인할 수 있습니다.

DKIM 서명은 선택 사항입니다. DKIM 호환 이메일 제공업체의 전달 가능성을 향상시키기 위해 DKIM 서명을 사용하여 이메일에 서명하기로 결정할 수 있습니다. Amazon SES는 DKIM 서명을 사용하여 메시지에 서명하는 세 가지 옵션을 제공합니다.

Easy DKIM : SES는 퍼블릭-프라이빗 키 쌍을 생성하고 해당 자격 증명에서 보내는 모든 메시지에 DKIM 서명을 자동으로 추가합니다.

    확인된 도메인 ID를 위한 Easy DKIM 설정
    도메인에 대해 Easy DKIM을 설정하려면

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/ses/ 에서 Amazon SES 콘솔을 엽니다..

  2. 탐색 창의 구성 아래에서 확인된 ID를 선택합니다 .

  3. ID 목록에서 ID 유형이 Domain 인 ID를 선택합니다 .

  4. 인증 탭 아래 DKIM(DomainKeys Identified Mail) 컨테이너에서 편집을 선택합니다 .

  5. 고급 DKIM 설정 컨테이너 의 ID 유형 필드에서 Easy DKIM 버튼을 선택합니다 .

  6. DKIM 서명 키 길이 필드 에서 RSA_2048_BIT 또는 RSA_1024_BIT를 선택합니다 .

  7. DKIM 서명 필드 에서 사용 상자를 선택하십시오 .

  8. 변경 사항 저장을 선택합니다 .

  9. 이제 Easy DKIM으로 도메인 ID를 구성했으므로 DNS 공급자와 확인 프로세스를 완료해야 합니다. DNS 공급자를 통해 DKIM 도메인 ID 확인 으로 이동 하고 Easy DKIM에 대한 DNS 인증 절차를 따르세요.


Reference

▶ 참고문서 [1] : Amazon SES를 사용하여 전송하는 이메일의 높은 반송률을 처리하는 방법

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

▶ 참고문서 [2] :  확인된 도메인 ID를 위한 Easy DKIM 설정
https://docs.aws.amazon.com/ses/latest/dg/send-email-authentication-dkim-easy.html

▶ 참고문서 [3] : Amazon SES에서 자체 DKIM 인증 토큰(BYODKIM) 제공
https://docs.aws.amazon.com/ses/latest/dg/send-email-authentication-dkim-bring-your-own.html

▶ 참고문서 [4] : Amazon SES에서 수동 DKIM 로그인
https://docs.aws.amazon.com/ses/latest/dg/send-email-authentication-dkim-manual.html