本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SES 的 Amazon SNS 通知內容
退信、投訴和遞送通知會以 JavaScript 物件標記法 (JSON) 格式發佈到 Amazon Simple Notification Service (Amazon SNS)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
物件的commonHeaders
與mail
欄位擷取原始訊息標題。
最上層 JSON 物件
Amazon SES 通知中的最上層 JSON 物件包含下列欄位。
欄位名稱 | 描述 |
---|---|
notificationType |
擁有由 JSON 物件呈現的通知類型之字串。可能值為 如果您設定事件發佈,此欄位名稱為 |
mail |
其中包含與通知相關之原始電子郵件資訊的 JSON 物件。如需詳細資訊,請參閱「郵件物件」。 |
bounce |
此欄位只會在 |
complaint |
此欄位只會在 |
delivery |
此欄位只會在 |
郵件物件
每個退信、投訴和傳遞通知包含原始電子郵件的 mail
物件相關資訊。其中包含 mail
物件相關資訊的 JSON 物件有下列欄位。
欄位名稱 | 描述 |
---|---|
timestamp
|
原始訊息傳送的時間 (以 ISO8601 格式顯示)。 |
messageId
|
Amazon SES 指派給訊息的專有 ID。您傳送訊息後,Amazon SES 會回傳此數值給您。 注意此訊息 ID 是由 Amazon SES 指派。您可以在 |
source
|
傳送出原始訊息的電子郵件地址 (信封的「寄件人」地址)。 |
sourceArn
|
用以傳送電子郵件之身分的 Amazon Resource Name (ARN)。在傳送授權的情況下, |
sourceIp
|
執行向 Amazon SES 發出電子郵件傳送請求之用戶端的原始公有 IP 地址。 |
sendingAccountId
|
用以傳送電子郵件之帳戶的 AWS 帳戶 ID。在傳送授權的情況下, |
callerIdentity
|
傳送電子郵件的 Amazon SES 使用者之 IAM 身分。 |
destination
|
原始郵件收件人的電子郵件地址清單。 |
headersTruncated
|
只有在您設定通知設定,使其包含原始電子郵件的標頭時,此物件才會存在。 指出通知中的標頭是否截斷。若原始訊息標頭的大小超過 10 KB,Amazon SES 會截斷通知中的標頭。可能值為 |
headers
|
只有在您設定通知設定,使其包含原始電子郵件的標頭時,此物件才會存在。 電子郵件原始標題的清單。清單中的每項標題都有 注意
|
commonHeaders
|
只有在您設定通知設定,使其包含原始電子郵件的標頭時,此物件才會存在。 包含原始電子郵件常見電子郵件標頭的相關資訊,包括寄件人、收件人及主旨欄位。在此物件中,每個標頭都是一個鍵。寄件人和收件人欄位都會以可包含多個值的陣列呈現。 注意針對事件, |
以下為包含原始電子郵件標題的 mail
物件範例。未將此通知類型設定為包含原始電子郵件標題時,mail
物件不會包含 headersTruncated
、headers
與 commonHeaders
欄位。
{ "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 物件,其中包含具有以下欄位的退信相關資訊。
若 Amazon SES 能聯絡遠端訊息傳輸授權單位 (MTA),則也會顯示以下欄位。
欄位名稱 | 描述 |
---|---|
remoteMtaIp
|
Amazon SES 嘗試傳送電子郵件的 MTA IP 地址。 |
若退信有連接遞送狀態通知 (DSN),則也會顯示以下欄位。
欄位名稱 | 描述 |
---|---|
reportingMTA
|
來自 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 的 |
或者,如果 DSN 連接到退信,也可能會顯示下列欄位。
欄位名稱 | 描述 |
---|---|
action
|
來自 DSN 的 |
status
|
來自 DSN 的 |
diagnosticCode
|
由回報 MTA 發出的狀態碼。此為來自 DSN 的 |
以下可能會在 bouncedRecipients
清單中的物件範例。
{ "emailAddress": "recipient@example.com", "action": "failed", "status": "5.0.0", "diagnosticCode": "X-Postfix; unknown user" }
退信類型
退信物件包含 Undetermined
、Permanent
或 Transient
的退信類型。Permanent
和 Transient
退信類型也可包含數種退信子類型中的其中一種。
當您收到退信類型為 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
|
收件人的電子郵件提供者傳送了一般退信訊息。若造成訊息退信的問題解決,您可能可以在未來傳送訊息到相同的收件人。 注意若您傳送電子郵件到具有作用中自動回應規則 (例如「不在辦公室」訊息) 的收件人,您便可能會收到這類通知。即使回應具有 |
Transient
|
MailboxFull
|
收件人的電子郵件提供者傳送了退信訊息,因為收件人的收件匣已滿。信箱釋出空間後,您便可能可以在未來傳送給相同的收件人。 |
Transient
|
MessageTooLarge
|
收件人的電子郵件提供者傳送了退信訊息,因為您傳送的訊息過大。若您減少訊息的大小,您便可能可以傳送訊息給相同的收件人。 |
Transient
|
ContentRejected
|
收件人的電子郵件提供者傳送了退信訊息,因為您傳送的訊息包含提供者不允許的內容。若您變更訊息的內容,您便可能可以傳送訊息給相同的收件人。 |
Transient
|
AttachmentRejected
|
收件人的電子郵件提供者傳送了退信訊息,因為訊息包含無法接受的附件。例如,有些電子郵件提供者可能會拒絕特定檔案類型的附件,或是包含非常大型附件的訊息。若您移除或變更附件的內容,您便可能可以傳送訊息給相同的收件人。 |
投訴物件
其中包含投訴相關資訊的 JSON 物件有下列欄位。
欄位名稱 | 描述 |
---|---|
complainedRecipients
|
清單中包含可能曾因某些原因導致投訴的收件人相關資訊。如需更多詳細資訊,請參閱 提出投訴的收件人。 |
timestamp
|
ISP 傳送投訴通知的日期和時間,格式為 ISO 8601 格式。此欄位中的日期和時間可能和 Amazon SES 收到通知的日期和時間不同。 |
feedbackId
|
與投訴相關聯的唯一 ID。 |
complaintSubType
|
|
此外,如果意見回饋報告連接到該投訴,可能顯示下列欄位。
欄位名稱 | 描述 |
---|---|
userAgent
|
來自意見回饋報告的 |
complaintFeedbackType
|
自 ISP 傳送的意見回饋報告中的 |
arrivalDate
|
意見回饋報告中的 |
下列為 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" }