Amazon SES에 대한 Amazon SNS 알림 내용 - Amazon Simple Email Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SES에 대한 Amazon SNS 알림 내용

반송 메일, 수신 거부 및 전송 알림이 Amazon Simple Notification Service(Amazon SNS) 주제에 JavaScript Object Notation(JSON) 형식으로 게시됩니다. 최상위 JSON 객체는 notificationType 문자열, mail 객체 및 bounce 객체, complaint 객체 또는 delivery 객체를 포함합니다.

다양한 객체 유형에 대한 설명은 다음 단원을 참조하세요.

다음은 Amazon SES용 Amazon SNS 알림의 내용에 관한 몇 가지 중요한 정보입니다.

  • 특정 알림 유형에서, 여러 수신자를 위한 단일 Amazon SNS 알림을 수신할 수도 있고 수신자별 Amazon SNS 알림을 수신할 수도 있습니다. 코드는 Amazon SNS 알림을 구문 분석하고 두 사례를 모두 처리할 수 있어야 합니다. SES는 Amazon SNS를 통해 전송되는 알림에 대해 주문 또는 일괄 처리를 보장하지 않습니다. 하지만 다른 Amazon SNS 알림 유형(예: 반송 메일과 수신 거부)을 단일 알림으로 결합하면 안 됩니다.

  • 단일 수신자를 위한 여러 유형의 Amazon SNS 알림을 수신할 수 있습니다. 예를 들어 수신 메일 서버가 이메일을 수락하지만(전송 알림을 트리거) 이메일을 처리한 후 해당 이메일이 실제로는 반송된 것으로 판단할 수 있습니다(반송 메일 알림을 트리거). 그러나 이들은 알림 유형이 다르므로 언제나 별개의 알림입니다.

  • SES는 알림에 필드를 추가할 수 있는 권한을 보유합니다. 따라서 이러한 알림을 파싱하는 애플리케이션은 알 수 없는 필드를 처리할 수 있도록 유연해야 합니다.

  • SES는 이메일을 보낼 때 메시지의 헤더를 덮어씁니다. mail 객체의 headerscommonHeaders 필드에서 원래 메시지의 헤더를 가져올 수 있습니다.

최상위 JSON 객체

SES 알림의 최상위 JSON 객체에는 다음 필드가 포함됩니다.

필드 이름 설명
notificationType

JSON 객체가 나타내는 알림 유형을 담고 있는 문자열. 가능한 값은 Bounce, Complaint 또는 Delivery입니다.

이벤트 게시를 설정한 경우 이 필드의 이름은 eventType입니다.

mail

알림과 관련이 있는 원래 메일에 대한 정보를 포함하는 JSON 객체. 자세한 내용은 Mail 객체 단원을 참조하십시오.

bounce

이 필드는 notificationTypeBounce이고 반송 메일에 대한 정보를 담고 있는 JSON 객체를 포함하는 경우에만 존재합니다. 자세한 내용은 Bounce 객체 단원을 참조하십시오.

complaint

이 필드는 notificationTypeComplaint이고 수신 거부에 대한 정보를 담고 있는 JSON 객체를 포함하는 경우에만 존재합니다. 자세한 내용은 Complaint 객체 단원을 참조하십시오.

delivery

이 필드는 notificationTypeDelivery이고 전송에 대한 정보를 담고 있는 JSON 객체를 포함하는 경우에만 존재합니다. 자세한 내용은 전송 객체 단원을 참조하십시오.

Mail 객체

각 반송 메일, 수신 거부 또는 전송 알림은 mail 객체에 원래 메일에 대한 정보를 포함하고 있습니다. mail 객체 정보를 포함하는 JSON 객체는 다음 필드로 구성됩니다.

필드 이름 설명
timestamp

원래 메시지가 전송된 시간(ISO8601 형식).

messageId

SES가 메시지에 할당한 고유 ID입니다. 메시지를 전송할 때 SES가이 값을 반환했습니다.

참고

이 메시지 ID는 SES에서 할당했습니다. mail 객체의 headers 필드에서 원래 이메일의 메시지 ID를 찾을 수 있습니다.

source

원래 메시지를 전송한 이메일 주소(엔벌로프 MAIL FROM 주소).

sourceArn

이메일을 전송하는 데 사용된 ID의 Amazon 리소스 이름(ARN). 권한 부여 전송의 경우 sourceArn은 ID 소유자가 위임 발신자에게 메일 전송 시 사용하도록 권한을 부여한 ID의 ARN입니다. 권한 부여 전송에 대한 자세한 내용은 이메일 인증 방법 섹션을 참조하세요.

sourceIp

SES로 이메일 전송 요청을 수행한 클라이언트의 발신 퍼블릭 IP 주소입니다.

sendingAccountId

이메일을 보내는 데 사용된 계정의 AWS 계정 ID입니다. 권한 부여 전송의 경우 sendingAccountId는 위임 발신자의 계정 ID입니다.

callerIdentity

이메일을 전송한 SES 사용자의 IAM ID입니다.

destination

원래 메일의 수신자인 이메일 주소의 목록.

headersTruncated

이 객체는 원본 이메일의 헤더를 포함하도록 알림 설정을 구성한 경우에만 존재합니다.

알림에서 헤더가 잘렸는지 여부를 나타냅니다. SES는 원본 메시지의 헤더 크기가 10KB 이상이면 알림의 헤더를 잘라냅니다. 가능한 값은 truefalse입니다.

headers

이 객체는 원본 이메일의 헤더를 포함하도록 알림 설정을 구성한 경우에만 존재합니다.

이메일의 원래 헤더 목록입니다. 목록의 각 헤더에는 name 필드와 value 필드가 존재합니다.

참고

headers 객체 내의 모든 메시지 ID는 SES에 전달한 원본 메시지에서 가져온 것입니다. SES가 이후에 메시지에 할당한 메시지 ID는 mail 객체의 messageId 필드에 있습니다.

commonHeaders

이 객체는 원본 이메일의 헤더를 포함하도록 알림 설정을 구성한 경우에만 존재합니다.

원본 이메일의 공통 이메일 헤더(예: 보내는 사람, 받는 사람, 제목 필드)에 대한 정보를 포함합니다. 이 객체 내에서 각 헤더는 키입니다. 보내는 사람 및 받는 사람 필드는 여러 값을 포함할 수 있는 어레이로 표현됩니다.

참고

이벤트의 경우 commonHeaders 필드의 모든 메시지 ID는 Amazon SES가 메일 객체의 messageId 필드 내 메시지에 할당한 메시지 ID입니다. 알림에는 원래 이메일의 메시지 ID가 포함됩니다.

다음은 원래 이메일 헤더가 포함되어 있는 mail 객체의 예제입니다. 이 알림 유형에 원래 이메일 헤더가 포함되도록 구성하지 않은 경우, mail 객체에 headersTruncated, headerscommonHeaders 필드가 없습니다.

{ "timestamp":"2018-10-08T14:05:45 +0000", "messageId":"000001378603177f-7a5433e7-8edb-42ae-af10-f0181f34d6ee-000000", "source":"sender@example.com", "sourceArn": "arn:aws:ses:us-east-1:888888888888:identity/example.com", "sourceIp": "127.0.3.0", "sendingAccountId":"123456789012", "destination":[ "recipient@example.com" ], "headersTruncated":false, "headers":[ { "name":"From", "value":"\"Sender Name\" <sender@example.com>" }, { "name":"To", "value":"\"Recipient Name\" <recipient@example.com>" }, { "name":"Message-ID", "value":"custom-message-ID" }, { "name":"Subject", "value":"Hello" }, { "name":"Content-Type", "value":"text/plain; charset=\"UTF-8\"" }, { "name":"Content-Transfer-Encoding", "value":"base64" }, { "name":"Date", "value":"Mon, 08 Oct 2018 14:05:45 +0000" } ], "commonHeaders":{ "from":[ "Sender Name <sender@example.com>" ], "date":"Mon, 08 Oct 2018 14:05:45 +0000", "to":[ "Recipient Name <recipient@example.com>" ], "messageId":" custom-message-ID", "subject":"Message sent using SES" } }

Bounce 객체

반송 메일에 대한 정보를 포함하는 JSON 객체는 다음 필드로 구성됩니다.

필드 이름 설명
bounceType

SES에서 결정한 반송 메일의 유형입니다. 자세한 내용은 반송 메일 유형 단원을 참조하십시오.

bounceSubType

SES에서 결정한 반송 메일의 하위 유형입니다. 자세한 내용은 반송 메일 유형 단원을 참조하십시오.

bouncedRecipients

반송된 원래 메일의 수신자 정보를 포함하는 목록. 자세한 내용은 반송 수신자 단원을 참조하십시오.

timestamp

반송 메일이 전송된 날짜 및 시간(ISO8601 형식). 이는 SES가 알림을 수신한 시간이 아니라 ISP가 알림을 보낸 시간입니다.

feedbackId

반송 메일의 고유 ID.

SES가 원격 메시지 전송 기관(MTA)에 연락할 수 있는 경우 다음 필드도 있습니다.

필드 이름 설명
remoteMtaIp

SES가 이메일 전송을 시도한 MTA의 IP 주소입니다.

반송 메일에 전송 상태 알림(DSN)이 첨부된 경우 다음 필드도 존재합니다.

필드 이름 설명
reportingMTA

DSN의 Reporting-MTA 필드의 값. DSN에서 설명하는 전송, 중계 또는 게이트웨이 작업을 시도하는 MTA의 값입니다.

다음은 bounce 객체의 예입니다.

{ "bounceType":"Permanent", "bounceSubType": "General", "bouncedRecipients":[ { "status":"5.0.0", "action":"failed", "diagnosticCode":"smtp; 550 user unknown", "emailAddress":"recipient1@example.com" }, { "status":"4.0.0", "action":"delayed", "emailAddress":"recipient2@example.com" } ], "reportingMTA": "example.com", "timestamp":"2012-05-25T14:59:38.605Z", "feedbackId":"000001378603176d-5a4b5ad9-6f30-4198-a8c3-b1eb0c270a1d-000000", "remoteMtaIp":"127.0.2.0" }

반송 수신자

반송 메일 알림은 단일 수신자 또는 여러 수신자와 관련이 있을 수 있습니다. bouncedRecipients 필드는 객체(반송 메일 알림이 관련된 수신자당 1개)의 목록을 포함하고 있으며 항상 다음 필드로 구성됩니다.

필드 이름 설명
emailAddress

수신자의 이메일 주소. DSN이 사용 가능할 경우, DSN의 Final-Recipient 필드의 값입니다.

또는 반송 메일에 DSN이 첨부된 경우 다음 필드도 존재할 수 있습니다.

필드 이름 설명
action

DSN의 Action 필드의 값. 이 수신자에게 메시지를 전송하려는 시도의 결과로 보고-MTA가 수행하는 작업을 나타냅니다.

status

DSN의 Status 필드의 값. 메시지의 전송 상태를 나타내는 수신자별 전송 독립적 상태 코드입니다.

diagnosticCode

보고-MTA가 발행한 상태 코드. DSN의 Diagnostic-Code 필드의 값입니다. 이 필드가 DSN에는 없을 수 있습니다(따라서 JSON에도 없음).

다음은 bouncedRecipients 목록에 포함될 수 있는 객체의 예입니다.

{ "emailAddress": "recipient@example.com", "action": "failed", "status": "5.0.0", "diagnosticCode": "X-Postfix; unknown user" }

반송 메일 유형

반송 메일 객체에는 Undetermined, Permanent (하드) 또는 Transient (소프트)의 반송 메일 유형이 포함됩니다. Permanent (하드)Transient (소프트) 반송 메일 유형에는 여러 반송 메일 하위 유형 중 하나가 포함될 수도 있습니다.

반송 메일 유형이 Transient (소프트)인 반송 메일 알림을 받으면 메시지 반송을 유발한 문제가 해결되면 나중에 해당 수신자에게 이메일을 보낼 수 있습니다.

반송 메일 유형이 Permanent (하드)인 반송 메일 알림을 받으면 향후 해당 수신자에게 이메일을 보낼 수 없을 것입니다. 이러한 이유로 메일 발송 목록에서 반송 메일을 생성한 주소의 수신자를 즉시 제거해야 합니다.

참고

소프트 바운스(수신자의 받은 편지함이 가득 찬 것과 같은 임시 문제와 관련된 반송 메일)가 발생하면 SES는 일정 기간 동안 이메일을 다시 전송하려고 시도합니다. 해당 기간이 끝날 때 SES가 여전히 이메일을 전송할 수 없는 경우 시도가 중지됩니다.

SES는 하드 바운스 및 전송 시도를 중지한 소프트 바운스에 대한 알림을 제공합니다. 소프트 바운스가 발생할 때마다 알림을 받으려면 이벤트 게시를 활성화하고 전송 지연 이벤트가 발생할 때 알림을 보내도록 구성합니다.

bounceType bounceSubType 설명
Undetermined Undetermined

수신자의 이메일 공급자가 반송 메일 메시지를 보냈습니다. 반송 메시지에 SES가 반송 사유를 확인할 수 있는 충분한 정보가 포함되어 있지 않습니다. 반송 메일이 발생한 이메일의 반환 경로 헤더로 전송된 반송 이메일에 이메일 반송을 일으킨 문제에 대한 추가 정보가 들어 있을 수 있습니다.

Permanent General

수신자의 이메일 공급자가 하드 바운스 메시지를 보냈습니다.

중요

이러한 유형의 반송 메일 알림을 받은 경우, 메일 발송 목록에서 이 수신자의 이메일 주소를 즉시 제거해야 합니다. 하드 바운스를 생성하는 주소로 메시지를 보내면 발신자로서 평판에 부정적인 영향을 줄 수 있습니다. 하드 바운스를 생성하는 주소로 계속 이메일을 보내면 더 이상 이메일을 보내지 못하게 계정 사용을 일시 중지할 수 있습니다. Amazon SES 계정 수준 금지 목록 사용을(를) 참조하세요.

Permanent NoEmail

바운스 메시지에서 수신자 이메일 주소를 검색할 수 없습니다.

Permanent Suppressed

수신자의 이메일 주소는 최근 하드 바운스 생성 기록이 있으므로 SES 금지 목록에 있습니다. 전역 금지 목록을 재정의하려면 Amazon SES 계정 수준 금지 목록 사용 섹션을 참조하세요.

Permanent OnAccountSuppressionList

SES는 계정 수준 금지 목록에 있기 때문에이 주소로의 전송을 금지했습니다. 이는 반송 비율 지표에 반영되지 않습니다.

Permanent UnsubscribedRecipient

이 반송 메일 유형은 수신자 연락처가 주제 구독을 취소하고 목록 관리 옵션을 사용하여 메일을 전송할 때 발생합니다. SES는 고객 응대 기본 설정을 준수하며 전송을 시도하지 않습니다. 또한 전송을 시도하지 않았기 때문에이 반송 메일은 발신자 평판에 영향을 주지 않으며 반송 메일로 인해 수신자 연락처가 금지 목록에 추가되지 않습니다.

작은 정보

구독 취소된 수신자에게가 계속 전송되지 않도록 UnsubscribedRecipient 이벤트를 구독하는 것이 좋습니다. 를 고려합니다목록 관리 사용. 목록 관리는 구독자 목록의 출처여야 합니다. SES 적용 관점에서 볼 때 금지되거나 구독 취소된 수신자에게 계속 전송하면 이메일 전송 모범 사례를 준수하지 않는 것으로 평판이 나게 됩니다.

Transient General

수신자의 이메일 공급자가 일반 반송 메일 메시지를 보냈습니다. 나중에 메시지 반송의 원인이 해결될 경우 같은 수신자에게 이메일을 보낼 수 있습니다.

참고

자동 응답 규칙(예: "out of the office" 메시지)이 활성화된 수신자에게 이메일을 보낼 경우 이러한 유형의 알림을 받을 수 있습니다. 응답의 알림 유형은 이지만 BounceSES는 계정의 반송률을 계산할 때 자동 응답을 계산하지 않습니다.

Transient MailboxFull

수신자의 받은 편지함이 꽉 찼기 때문에 수신자의 이메일 공급자가 하드 바운스 메시지를 보냈습니다. 나중에 받은 편지함이 비워지면 같은 수신자에게 이메일을 보낼 수 있습니다.

Transient MessageTooLarge

보낸 메시지의 크기가 너무 크기 때문에 수신자의 이메일 공급자가 하드 바운스 메시지를 보냈습니다. 메시지 크기를 줄일 경우 같은 수신자에게 메시지를 보낼 수 있습니다.

Transient ContentRejected

보낸 메시지에 공급자가 허용하지 않는 콘텐츠가 포함되어 있기 때문에 수신자의 이메일 공급자가 반송 메일 메시지를 보냈습니다. 메시지의 콘텐츠를 변경할 경우 같은 수신자에게 메시지를 보낼 수 있습니다.

Transient AttachmentRejected

메시지에 허용되지 않는 첨부 파일이 포함되어 있기 때문에 수신자의 이메일 공급자가 하드 바운스 메시지를 보냈습니다. 예를 들어 일부 이메일 공급자는 특정한 파일 형식으로 된 첨부 파일이 들어 있는 메시지나 첨부 파일 크기가 매우 큰 메시지를 거부할 수 있습니다. 첨부 파일을 제거하거나 첨부 파일의 콘텐츠를 변경할 경우 같은 수신자에게 메시지를 보낼 수 있습니다.

Complaint 객체

수신 거부에 대한 정보를 포함하는 JSON 객체는 다음 필드로 구성됩니다.

필드 이름 설명
complainedRecipients

수신 거부에 책임이 있을 수 있는 수신자에 대한 정보를 포함하는 목록. 자세한 내용은 수신 거부한 수신자 단원을 참조하십시오.

timestamp

ISP가 수신 거부 알림을 전송한 날짜와 시간으로, ISO 8601 형식으로 표시됩니다. 이 필드의 날짜 및 시간은 SES가 알림을 수신한 날짜 및 시간과 동일하지 않을 수 있습니다.

feedbackId

불만과 연결된 고유한 ID입니다.

complaintSubType

complaintSubType 필드의 값은 null 또는 OnAccountSuppressionList일 수 있습니다. 값이 인 경우 OnAccountSuppressionListSES는 메시지를 수락했지만 계정 수준 금지 목록에 있었기 때문에 전송을 시도하지 않았습니다.

또한, 수신 거부에 피드백 보고서가 첨부된 경우 다음 필드가 포함될 수 있습니다.

필드 이름 설명
userAgent

피드백 보고서의 User-Agent 필드의 값입니다. 보고서를 생성한 시스템의 이름 및 버전을 나타냅니다.

complaintFeedbackType

ISP로부터 수신된 피드백 보고서의 Feedback-Type 필드의 값. 이 값은 피드백의 유형을 포함합니다.

arrivalDate

피드백 보고서의 Arrival-Date 또는 Received-Date 필드의 값(ISO8601 형식). 이 필드가 보고서에는 없을 수 있습니다(따라서 JSON에도 없음).

다음은 complaint 객체의 예입니다.

{ "userAgent":"ExampleCorp Feedback Loop (V0.01)", "complainedRecipients":[ { "emailAddress":"recipient1@example.com" } ], "complaintFeedbackType":"abuse", "arrivalDate":"2009-12-03T04:24:21.000-05:00", "timestamp":"2012-05-25T14:59:38.623Z", "feedbackId":"000001378603177f-18c07c78-fa81-4a58-9dd1-fedc3cb8f49a-000000" }

수신 거부한 수신자

complainedRecipients 필드는 수신 거부를 제출했을 수 있는 수신자의 목록을 포함합니다. 이 정보를 사용하여 수신 거부를 제출한 수신자를 확인한 다음 해당 수신자를 메일링 목록에서 즉시 제거해야 합니다.

중요

대부분의 ISP는 수신 거부 알림에서 불만을 제출한 수신자의 이메일 주소를 제거합니다. 따라서 이 목록에는 원래 메시지의 수신자 그리고 수신 거부를 보낸 ISP를 기준으로 수신 거부를 제출했을 수 있는 수신자의 목록이 포함되어 있습니다. SES는 원본 메시지에 대해 조회를 수행하여이 수신자 목록을 확인합니다.

이 목록의 JSON 객체는 다음 필드를 포함합니다.

필드 이름 설명
emailAddress

수신자의 이메일 주소.

다음은 수신 거부를 제기한 수신자 객체의 예입니다.

{ "emailAddress": "recipient1@example.com" }
참고

이 동작 때문에 (bcc 행에 나열된 30개 이메일 주소로 메시지 1개를 전송하는 대신) 수신자당 메시지 1개로 전송을 제한할 경우 어느 이메일 주소가 메시지에 대해 수신 거부를 제기했는지 더 확실히 알 수 있습니다.

수신 거부 유형

Internet Assigned Numbers Authority 웹사이트에 따라 complaintFeedbackType 필드에 보고 ISP가 할당한 다음과 같은 수신 거부 유형이 나타날 수 있습니다.

  • abuse - 원치 않는 이메일 또는 기타 유형의 이메일 침해를 나타냅니다.

  • auth-failure - 이메일 인증 실패 보고서.

  • fraud - 일종의 사기 또는 피싱 활동을 나타냅니다.

  • not-spam - 보고서를 제공하는 엔터티가 메시지를 스팸으로 간주하지 않음을 나타냅니다. 이는 스팸으로 잘못 태그 지정 또는 분류된 메시지를 교정하기 위해 사용될 수 있습니다.

  • other - 다른 등록된 유형에 들어맞지 않는 기타 피드백을 나타냅니다.

  • virus - 발원 메시지에서 바이러스가 발견되었다는 보고서.

전송 객체

전송에 대한 정보를 포함하는 JSON 객체에는 항상 다음 필드가 포함됩니다.

필드 이름 설명
timestamp

SES가 수신자의 메일 서버로 이메일을 전송한 시간(ISO8601 형식).

processingTimeMillis

SES가 발신자로부터 메시지를 수신자의 메일 서버로 전달하기 위한 요청을 수락한 시점 사이의 밀리초 단위 시간입니다.

recipients

전송 알림이 적용되는 이메일이 의도한 수신자의 목록.

smtpResponse

SES의 이메일을 수락한 원격 ISP의 SMTP 응답 메시지입니다. 이 메시지는 이메일, 수신 메일 서버, 수신 ISP마다 다릅니다.

reportingMTA

메일을 보낸 SES 메일 서버의 호스트 이름입니다.

remoteMtaIp

SES가 이메일을 전송한 MTA의 IP 주소입니다.

다음은 delivery 객체의 예입니다.

{ "timestamp":"2014-05-28T22:41:01.184Z", "processingTimeMillis":546, "recipients":["success@simulator.amazonses.com"], "smtpResponse":"250 ok: Message 64111812 accepted", "reportingMTA":"a8-70.smtp-out.amazonses.com", "remoteMtaIp":"127.0.2.0" }