Amazon SES 的 Amazon SNS 通知內容 - Amazon Simple Email Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon SES 的 Amazon SNS 通知內容

退信、投訴和遞送通知會以 JavaScript 物件標記法 (JSON) 格式發佈到 Amazon Simple Notification Service (Amazon SNS) 主題。最上層 JSON 物件包含一個 notificationType 字串、mail 物件,或者 bounce 物件、complaint 物件或 delivery 物件。

請參閱以下章節以了解不同類型物件的說明:

以下幾點重要備註與 Amazon SES 的 Amazon SNS 通知內容相關:

  • 使用指定通知類型時,您可能會收到針對多個收件人的 Amazon SNS 通知,或者針對每個收件人各收到單一 Amazon SNS 通知。您的程式碼應能剖析 Amazon SNS 通知以及處理這兩種情況;Amazon SES 不保證會對透過 Amazon SES 傳送的通知進行排序或批次處理。但是,不同 Amazon SNS 通知類型 (例如退信與投訴) 不會合併為單一通知。

  • 您可能會收到針對一個收件人的多種 Amazon SNS 通知類型。例如,接收郵件伺服器可能會接受電子郵件 (觸發傳遞通知),但在處理電子郵件後,接收郵件伺服器可能會判斷電子郵件是否確實導致退信 (觸發退信通知)。但是,由於這些通知屬於不同類型,因此會一律以個別通知顯示。

  • Amazon SES 保留在通知中新增額外欄位的權利。因此,剖析這些通知的應用程式必須具備足夠的彈性,以處理未知欄位。

  • Amazon SES 會在傳送電子郵件時覆寫訊息標頭。您可以從 headers 物件的 commonHeadersmail 欄位擷取原始訊息標題。

最上層 JSON 物件

Amazon SES 通知中的最上層 JSON 物件包含下列欄位。

欄位名稱 描述
notificationType

擁有由 JSON 物件呈現的通知類型之字串。可能值為 BounceComplaintDelivery

如果您設定事件發佈,此欄位名稱為 eventType

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 物件的 headers 欄位中找到原始電子郵件的訊息 ID。

source

傳送出原始訊息的電子郵件地址 (信封的「寄件人」地址)。

sourceArn

用以傳送電子郵件之身分的 Amazon Resource Name (ARN)。在傳送授權的情況下,sourceArn 為身分持有者授權給委託寄件者之身分的 ARN,用以傳送電子郵件。如需關於傳送授權的詳細資訊,請參閱 電子郵件身分驗證方法

sourceIp

執行向 Amazon SES 發出電子郵件傳送請求之用戶端的原始公有 IP 地址。

sendingAccountId

用以傳送電子郵件之帳戶的 AWS 帳戶 ID。在傳送授權的情況下,sendingAccountId 為委託寄件者的帳戶 ID。

callerIdentity

傳送電子郵件的 Amazon SES 使用者之 IAM 身分。

destination

原始郵件收件人的電子郵件地址清單。

headersTruncated

只有在您設定通知設定,使其包含原始電子郵件的標頭時,此物件才會存在。

指出通知中的標頭是否截斷。若原始訊息標頭的大小超過 10 KB,Amazon SES 會截斷通知中的標頭。可能值為 truefalse

headers

只有在您設定通知設定,使其包含原始電子郵件的標頭時,此物件才會存在。

電子郵件原始標題的清單。清單中的每項標題都有 name 欄位與 value 欄位。

注意

headers 物件中的任何訊息 ID 都來自於您傳遞給 Amazon SES 的原始訊息。Amazon SES 隨即指派給訊息的訊息 ID,位於 mail 物件的 messageId 欄位內。

commonHeaders

只有在您設定通知設定,使其包含原始電子郵件的標頭時,此物件才會存在。

包含原始電子郵件常見電子郵件標頭的相關資訊,包括寄件人、收件人及主旨欄位。在此物件中,每個標頭都是一個鍵。寄件人和收件人欄位都會以可包含多個值的陣列呈現。

注意

針對事件,commonHeaders 欄位內的任何訊息 ID,就是 Amazon SES 後續指派給郵件物件的 messageId 欄位中之訊息的訊息 ID。通知會包含原始電子郵件的訊息 ID。

以下為包含原始電子郵件標題的 mail 物件範例。未將此通知類型設定為包含原始電子郵件標題時,mail 物件不會包含 headersTruncatedheaderscommonHeaders 欄位。

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

退信物件

JSON 物件,其中包含具有以下欄位的退信相關資訊。

欄位名稱 描述
bounceType

退信類型,由 Amazon SES 判定。如需更多詳細資訊,請參閱 退信類型

bounceSubType

退信的副類型,由 Amazon SES 判定。如需詳細資訊,請參閱「退信類型」。

bouncedRecipients

其中包含遭退信的原始郵件收件人之相關資訊的清單。如需更多詳細資訊,請參閱 退信的收件人

timestamp

退信傳送的日期與時間 (以 ISO8601 格式顯示)。請注意,此為 ISP 傳送通知的時間,而非 Amazon SES 收到的時間。

feedbackId

退信的唯一 ID。

若 Amazon SES 能聯絡遠端訊息傳輸授權單位 (MTA),則也會顯示以下欄位。

欄位名稱 描述
remoteMtaIp

Amazon SES 嘗試傳送電子郵件的 MTA IP 地址。

若退信有連接遞送狀態通知 (DSN),則也會顯示以下欄位。

欄位名稱 描述
reportingMTA

來自 DSN 的 Reporting-MTA 欄位數值。這是嘗試執行傳遞、轉傳或閘道操作的 MTA 值,如 DSN 中所述。

下列為 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 欄位包含物件清單 (每個與退信通知相關的收件人各一個),並且一律會包含以下欄位。

欄位名稱 描述
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" }

退信類型

退信物件包含 UndeterminedPermanentTransient 的退信類型。PermanentTransient 退信類型也可包含數種退信子類型中的其中一種。

當您收到退信類型為 Transient 的退信通知時,若造成訊息退信的問題解決,您可能可以在未來傳送電子郵件給該收件人。

當您收到退信類型為 Permanent 的退信通知時,您在未來也不太可能可以傳送電子郵件給該收件人。因此,建議您立即從電子郵件清單中移除造成此種退信的收件人地址。

注意

發生軟退信 (與暫時性問題相關的退信,例如收件人的收件匣已滿等) 時,Amazon SES 會在一定時間範圍內嘗試重新遞送電子郵件。若 Amazon SES 在該段時間結束後仍然無法遞送電子郵件,便會停止嘗試。

Amazon SES 會提供硬退信的通知,以及停止嘗試遞送的軟退信通知。若您希望每次出現軟退信時都收到通知,請啟用事件發佈,並將之設定為在傳送延遲事件出現時傳送通知。

bounceType bounceSubType 描述
Undetermined Undetermined

收件人的電子郵件提供者傳送退信訊息。退信訊息未包含足夠資訊,因此 Amazon SES 無法判斷退信的原因為何。傳送到造成退信電子郵件傳回路徑標頭中地址的退信電子郵件,可能包含造成電子郵件退信問題的額外資訊。

Permanent General

收件人的電子郵件提供者傳送了硬退信訊息。

重要

當您收到這類退信通知時,建議您立即從電子郵件清單中移除收件人的電子郵件地址。傳送訊息到產生硬退信的地址,可能會對您做為寄件者的評價產生負面影響。若您繼續傳送電子郵件到產生硬退信的地址,我們可能會暫停您傳送其他電子郵件的能力。請參閱使用 Amazon SES 帳戶級別禁止列表

Permanent NoEmail

無法從退信訊息中擷取收件人電子郵件地址。

Permanent Suppressed

收件人的電子郵件地址位於 Amazon SES 的禁止名單上,因為它最近產生了硬退信。若要複寫全域禁止名單,請參閱 使用 Amazon SES 帳戶級別禁止列表

Permanent OnAccountSuppressionList

Amazon SES 已禁止傳送至此地址,因為它列於帳戶層級禁止名單中。這不會計入您的退信率指標。

Transient General

收件人的電子郵件提供者傳送了一般退信訊息。若造成訊息退信的問題解決,您可能可以在未來傳送訊息到相同的收件人。

注意

若您傳送電子郵件到具有作用中自動回應規則 (例如「不在辦公室」訊息) 的收件人,您便可能會收到這類通知。即使回應具有 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 or 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,包含可能曾傳送投訴的收件人相關資訊。Amazon SES 將針對原始訊息執行查詢,以判斷此收件人清單。

在這個清單中的 JSON 物件包含下列欄位。

欄位名稱 描述
emailAddress

收件人的電子郵件地址。

下列為提出投訴的收件人物件範例。

{ "emailAddress": "recipient1@example.com" }
注意

由於這種行為,若您限制傳送為每個收件人單一訊息 (而非在密件副本行中加入 30 個不同電子郵件地址來傳送一個訊息),便可以更確信地知道哪些電子郵件地址曾對您的訊息提出投訴。

投訴類型

您可能看到 complaintFeedbackType 欄位中由回報 ISP 根據 Internet Assigned Numbers Authority website 指派的下列投訴類型:

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