本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 通知並處理這兩種情況;SES 不會對透過 Amazon SNS 傳送的通知進行排序或批次處理保證。但是,不同 Amazon SNS 通知類型 (例如退信與投訴) 不會合併為單一通知。
-
您可能會收到針對一個收件人的多種 Amazon SNS 通知類型。例如,接收郵件伺服器可能會接受電子郵件 (觸發傳遞通知),但在處理電子郵件後,接收郵件伺服器可能會判斷電子郵件是否確實導致退信 (觸發退信通知)。但是,由於這些通知屬於不同類型,因此會一律以個別通知顯示。
-
SES 保留將其他欄位新增至通知的權利。因此,剖析這些通知的應用程式必須具備足夠的彈性,以處理未知欄位。
-
SES 會在傳送電子郵件時覆寫訊息的標頭。您可以從
headers物件的commonHeaders與mail欄位擷取原始訊息標題。
最上層 JSON 物件
SES 通知中的最上層 JSON 物件包含下列欄位。
| 欄位名稱 | 描述 |
|---|---|
notificationType |
擁有由 JSON 物件呈現的通知類型之字串。可能值為 如果您設定事件發佈,此欄位名稱為 |
mail |
其中包含與通知相關之原始電子郵件資訊的 JSON 物件。如需詳細資訊,請參閱「郵件物件」。 |
bounce |
此欄位只會在 |
complaint |
此欄位只會在 |
delivery |
此欄位只會在 |
郵件物件
每個退信、投訴和傳遞通知包含原始電子郵件的 mail 物件相關資訊。其中包含 mail 物件相關資訊的 JSON 物件有下列欄位。
| 欄位名稱 | 描述 |
|---|---|
timestamp
|
原始訊息傳送的時間 (以 ISO8601 格式顯示)。 |
messageId
|
SES 指派給訊息的唯一 ID。當您傳送訊息時,SES 會傳回此值給您。 注意此訊息 ID 是由 SES 指派。您可以在 |
source
|
傳送出原始訊息的電子郵件地址 (信封的「寄件人」地址)。 |
sourceArn
|
用以傳送電子郵件之身分的 Amazon Resource Name (ARN)。在傳送授權的情況下, |
sourceIp
|
用戶端對 SES 執行電子郵件傳送請求的原始公有 IP 地址。 |
sendingAccountId
|
用來傳送電子郵件的帳戶 AWS 帳戶 ID。在傳送授權的情況下, |
callerIdentity
|
傳送電子郵件的 SES 使用者的 IAM 身分。 |
destination
|
原始郵件收件人的電子郵件地址清單。 |
headersTruncated
|
只有在您設定通知設定,使其包含原始電子郵件的標頭時,此物件才會存在。 指出通知中的標頭是否截斷。當原始訊息的標頭大小為 10 KB 或更大時,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 SES" } }
退信物件
JSON 物件,其中包含具有以下欄位的退信相關資訊。
如果 SES 能夠聯絡遠端訊息傳輸授權機構 (MTA),則也會出現下列欄位。
| 欄位名稱 | 描述 |
|---|---|
remoteMtaIp
|
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(硬) 的退信通知時,您不太可能能夠在未來傳送電子郵件給該收件人。因此,建議您立即從電子郵件清單中移除造成此種退信的收件人地址。
注意
發生軟退信 (與暫時問題相關的退信,例如收件人的收件匣已滿) 時,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
|
收件人的電子郵件提供者傳送了一般退信訊息。若造成訊息退信的問題解決,您可能可以在未來傳送訊息到相同的收件人。 注意若您傳送電子郵件到具有作用中自動回應規則 (例如「不在辦公室」訊息) 的收件人,您便可能會收到這類通知。即使回應的通知類型為 |
Transient
|
MailboxFull
|
收件人的電子郵件提供者傳送了退信訊息,因為收件人的收件匣已滿。信箱釋出空間後,您便可能可以在未來傳送給相同的收件人。 |
Transient
|
MessageTooLarge
|
收件人的電子郵件提供者傳送了退信訊息,因為您傳送的訊息過大。若您減少訊息的大小,您便可能可以傳送訊息給相同的收件人。 |
Transient
|
ContentRejected
|
收件人的電子郵件提供者傳送了退信訊息,因為您傳送的訊息包含提供者不允許的內容。若您變更訊息的內容,您便可能可以傳送訊息給相同的收件人。 |
Transient
|
AttachmentRejected
|
收件人的電子郵件提供者傳送了退信訊息,因為訊息包含無法接受的附件。例如,有些電子郵件提供者可能會拒絕特定檔案類型的附件,或是包含非常大型附件的訊息。若您移除或變更附件的內容,您便可能可以傳送訊息給相同的收件人。 |
投訴物件
其中包含投訴相關資訊的 JSON 物件有下列欄位。
| 欄位名稱 | 描述 |
|---|---|
complainedRecipients
|
清單中包含可能曾因某些原因導致投訴的收件人相關資訊。如需詳細資訊,請參閱提出投訴的收件人。 |
timestamp
|
ISP 傳送投訴通知的日期和時間,格式為 ISO 8601 格式。此欄位中的日期和時間可能與 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,包含可能曾傳送投訴的收件人相關資訊。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
|
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" }