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 알림을 파싱할 수 있고 두 경우를 모두 처리할 수 있어야 합니다. Amazon SES는 Amazon SNS를 통해 전송된 알림에 대해 정렬 및 배칭을 보장하지 않습니다. 하지만 절대로 다른 Amazon SNS 알림 유형(예: 반송 메일과 불만)을 단일 알림으로 결합하면 안 됩니다.

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

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

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

최상위 JSON 객체

Amazon SES 알림 내 최상위 JSON 객체는 다음 필드로 구성됩니다.

필드 이름 설명

notificationType

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

mail

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

bounce

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

complaint

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

delivery

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

메일 객체

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

필드 이름 설명

timestamp

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

messageId

Amazon SES에서 메시지에 할당한 고유 ID입니다. Amazon SES는 메시지를 보낼 때 이 값을 반환합니다.

참고

이 메시지 ID는 Amazon SES에서 할당한 것입니다. mail 객체의 headerscommonHeaders 필드에서 원래 메시지의 메시지 ID를 찾을 수 있습니다.

source

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

sourceArn

이메일을 전송하는 데 사용된 자격 증명의 Amazon 리소스 이름(ARN). 권한 부여 전송의 경우 sourceArn은 자격 증명 소유자가 위임 발신자에게 메일 전송 시 사용하도록 권한을 부여한 자격 증명의 ARN입니다. 권한 부여 전송에 대한 자세한 내용은 전송 권한 부여 사용 단원을 참조하십시오.

sourceIp

Amazon SES에 이메일 전송 요청을 한 클라이언트의 원본 퍼블릭 IP 주소.

sendingAccountId

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

destination

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

headersTruncated

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

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

headers

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

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

참고

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

commonHeaders

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

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

참고

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

다음은 원래 이메일 헤더가 포함되어 있는 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-west-2: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 Amazon SES" } }

반송 메일 객체

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

필드 이름 설명

bounceType

Amazon SES가 결정한 반송 메일의 유형. 자세한 내용은 반송 메일 유형을 참조하십시오.

bounceSubType

Amazon SES가 결정한 반송 메일의 하위 유형. 자세한 내용은 반송 메일 유형을 참조하십시오.

bouncedRecipients

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

timestamp

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

feedbackId

반송 메일의 고유 ID.

Amazon SES에서 원격 메시지 전송 권한(MTA)에 연락할 수 있는 경우 다음 필드도 표시됩니다.

필드 이름 설명

remoteMtaIp

Amazon 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 반송 메일 유형이 포함됩니다. PermanentTransient 반송 메일 유형에는 여러 반송 메일 하위 유형 중 하나도 포함될 수 있습니다.

Transient 반송 메일 유형이 포함된 반송 메일 알림을 받을 경우, 나중에 메시지 반송의 원인이 해결될 경우 해당 수신자에게 이메일을 보낼 수 있습니다.

Permanent 반송 메일 유형이 포함된 반송 메일 알림을 받을 경우에는 나중에도 해당 수신자에게 이메일을 보내지 못할 가능성이 큽니다. 이러한 이유로 메일 발송 목록에서 반송 메일을 생성한 주소의 수신자를 즉시 제거해야 합니다.

참고

소프트 바운스(수신자의 받은 편지함이 꽉 찬 상태와 같은 일시적인 문제와 관련된 반송 메일)가 발생할 경우 Amazon SES에서는 일정 기간 동안 이메일 재전송을 시도합니다. 이 기간이 끝나도 이메일을 전송할 수 없으면 Amazon SES는 시도를 중단합니다.

Amazon SES는 하드 바운스뿐만 아니라 소프트 바운스에 대해서도 전송 시도를 중지했다는 알림을 보냅니다.

bounceType bounceSubType 설명

Undetermined

Undetermined

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

Permanent

General

수신자의 이메일 공급자가 하드 바운스 메시지를 보냈지만, 하드 바운스의 원인을 명시하지 않았습니다.

중요

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

Permanent

NoEmail

의도한 수신자의 이메일 공급자가 이메일 주소가 존재하지 않음을 의미하는 반송 메일 메시지를 보냈습니다.

중요

이러한 유형의 반송 메일 알림을 받은 경우, 메일 발송 목록에서 이 수신자의 이메일 주소를 즉시 제거해야 합니다. 존재하지 않는 주소로 메시지를 보내면 발신자로서 평판에 부정적인 영향을 줄 수 있습니다. 존재하지 않는 주소로 계속 이메일을 보내면 더 이상 이메일을 보내지 못하게 계정 사용을 일시 중지할 수 있습니다.

Permanent

Suppressed

수신자의 이메일 주소가 최근에 하드 바운스를 생성했다는 이력 때문에 Amazon SES 금지 목록에 있습니다. Amazon SES 금지 목록에서 주소를 제거하는 방법에 대한 자세한 내용은 Amazon SES 전역 금지 목록 사용 단원을 참조하십시오.

Permanent

OnAccountSuppressionList

Amazon SES는 계정 수준 금지 목록에 있으므로 이 주소로 보내는 것을 금지했습니다.

Transient

General

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

참고

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

Transient

MailboxFull

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

Transient

MessageTooLarge

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

Transient

ContentRejected

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

Transient

AttachmentRejected

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

불만 제기 객체

불만 제기에 대한 정보를 포함하는 JSON 객체는 다음 필드로 구성됩니다.

필드 이름 설명

complainedRecipients

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

timestamp

ISP가 불만 제기 알림을 전송한 날짜와 시간으로, ISO 8601 형식으로 표시됩니다. 이 필드의 날짜 및 시간이 Amazon SES에서 알림을 받은 날짜 및 시간과 다를 수 있습니다.

feedbackId

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

complaintSubType

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

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

필드 이름 설명

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는 불만 제기 알림에서 불만을 제출한 수신자의 이메일 주소를 제거합니다. 이러한 이유로 이 목록은 원래 메시지의 수신자 그리고 AWS가 수신 거부를 수신한 ISP를 기준으로 수신 거부를 발송했을 수 있는 수신자에 대한 정보를 포함합니다. Amazon SES는 원래 메시지를 조회하여 이 수신자 목록을 결정합니다.

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

필드 이름 설명

emailAddress

수신자의 이메일 주소.

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

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

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

불만 제기 유형

인터넷 할당 번호 관리기관 웹 사이트에 따라 complaintFeedbackType 필드에는 보고 ISP에서 지정한 다음과 같은 수신 거부 유형이 표시될 수 있습니다.

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

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

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

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

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

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

전송 객체

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

필드 이름 설명

timestamp

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

processingTimeMillis

Amazon SES가 발신자로부터 요청을 수락한 때로부터 수신자의 메일 서버로 메시지를 전송한 때까지의 시간(단위: 밀리초).

recipients

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

smtpResponse

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

reportingMTA

메일을 전송한 Amazon SES 메일 서버의 호스트 이름.

remoteMtaIp

Amazon 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" }