本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 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 SNS 发送的通知进行排序或批处理。但是,不同的 Amazon SNS 通知类型(例如,退回邮件和投诉)不会合并为一个通知。
-
您可能会针对一个收件人收到多个类型的 Amazon SNS 通知。例如,接收邮件服务器可能接受电子邮件 (触发送达通知),但在处理电子邮件后,接收邮件服务器可能会确定该电子邮件实际导致了退回邮件 (触发退回邮件通知)。不过,这些通知始终单独发送,因为它们属于不同的类型。
-
Amazon SES 保留在通知中添加其他字段的权利。同样地,解析这些通知的应用程序必须足够灵活以处理未知字段。
-
Amazon SES 在发送电子邮件时会覆盖邮件标头。您可以通过
mail
对象的headers
和commonHeaders
字段检索原始邮件的标头。
顶级 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
|
发送原始电子邮件的电子邮件地址 (信封 MAIL FROM 地址)。 |
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 已能够联系远程 Message Transfer Authority(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 确定退回邮件的原因。退回邮件电子邮件 (发送到电子邮件的 Return-Path 标头中地址) 可能包含有关导致电子邮件退回的问题的其他信息。 |
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 发送投诉通知时的日期和时间,采用 ISO8601 格式。此字段中的日期和时间可能与 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 分配的
-
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" }