使用Supression List, 要确认自己的SES不是Sandbox级别
账户级别Supression List
允许我们在账户级别管理电子邮件发送。通过将电子邮件地址添加到此列表中,我们可以防止向特定收件人发送电子邮件。
Supression List
在Amazon SES中,我们可以在两个级别管理Supression List
: 账户级别和配置集(Configuration Set)级别。
账户级别Supression List
: 此类型的Supression List
适用于我们的整个AWS账户。当一个电子邮件地址被添加到账户级别Supression List
时,无论使用哪个配置集,Amazon SES都不会向该地址发送电子邮件。这有助于通过防止向以前Bounce或Complaint的收件人发送电子邮件来维护健康的发送环境。
配置集级别Supression List
: 此类型的Supression List
特定于特定的配置集。我们可以创建具有不同Supression List
的多个配置集,以根据特定条件或要求管理电子邮件发送。这允许对我们的电子邮件发送进行更细粒度的控制,使我们能够针对特定的受众群体,同时尊重他们的偏好并最大限度地减少投诉或Bounce的风险。
Supression List
的增删改查操作进入SES的Supression List
页面:
将电子邮件地址添加到账户级别Supression List
:
上面操作有对应的命令:
aws sesv2 put-suppressed-destination --email-address "recipient@example.com" --reason "BOUNCE"
添加完成后的效果:
Supression List
中检查特定电子邮件地址是否在账户级别Supression List
中:
aws sesv2 get-suppressed-destination --email-address "recipient@example.com"
此命令检查recipient@example.com
是否在Supression List
中,如果存在,则返回记录。
如果成功,我们应该会收到一个JSON文件,概述了目标的EmailAddress
和Reason
:
Supression List
中删除电子邮件地址从账户级别Supression List
中删除电子邮件地址:
aws sesv2 delete-suppressed-destination --email-address "recipient@example.com"
此命令从Supression List
中删除recipient@example.com
。我们可以再次运行get-suppressed-destination
以确保该电子邮件地址已从Supression List
中删除。如果删除操作成功,我们应该会收到一个NotFoundException
。
上面的API一次只能添加一个邮箱,如果有很多邮箱,需要使用批量添加的方式。
将我们的地址列表以CSV或JSON格式上传到Amazon S3对象。
添加地址的CSV格式示例:
recipient1@example.com,BOUNCE
recipient2@example.com,COMPLAINT
添加地址的JSON格式示例:
{"emailAddress":"recipient1@example.com","reason":"BOUNCE"}
{"emailAddress":"recipient2@example.com","reason":"COMPLAINT"}
我们可以使用以下AWS CLI命令将文件上传到S3:
aws s3 cp FILEPATH s3://BUCKET-NAME/OBJECT-NAME
将FILEPATH
替换为我们本地机器上文件的路径,将BUCKET-NAME
替换为我们的S3存储桶名称,将OBJECT-NAME
替换为我们要在S3中为对象命名的名称。
通过将策略附加到S3存储桶,授予SES读取包含Supression邮件地址的S3对象的权限。
使用以下AWS CLI命令将策略添加到S3桶:
aws s3api put-bucket-policy --bucket BUCKET-NAME --policy '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSESGet",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*",
"Condition": {
"StringEquals": {
"aws:Referer": "AWSACCOUNTID"
}
}
}
]
}'
将BUCKET-NAME
替换为我们的S3存储桶名称,将AWSACCOUNTID
替换为我们的AWS账户ID。
使用AWS CLI创建导入作业并将电子邮件地址添加到Supression List
:
aws sesv2 create-import-job --import-destination SuppressionListDestination={SuppressionListImportAction=PUT} --import-data-source S3Url=s3://BUCKET-NAME/OBJECT-NAME,DataFormat=CSV
将BUCKET-NAME
替换为我们的S3存储桶名称,将OBJECT-NAME
替换为包含电子邮件地址的S3对象名称。
此命令将返回一个JobID
,请记下此值,以便在下一步中查询导入作业的状态。
使用以下AWS CLI命令检查导入作业的状态:
aws sesv2 get-import-job --job-id JOB-ID
将JOB-ID
替换为我们刚刚创建的导入作业的ID:
{
"JobId": "0a16a755-5069-493c-ba02-f50280ce4b7d",
"ImportDestination": {
"SuppressionListDestination": {
"SuppressionListImportAction": "PUT"
}
},
"ImportDataSource": {
"S3Url": "s3://mysuppressionlisttestbucket/suppressionlist.csv",
"DataFormat": "CSV"
},
"JobStatus": "COMPLETED",
"CreatedTimestamp": "2023-04-02T20:21:14.685000+08:00",
"CompletedTimestamp": "2023-04-02T20:21:27.800000+08:00",
"ProcessedRecordsCount": 2,
"FailedRecordsCount": 0
}
一旦导入作业完成,我们可以在 SES控制台的"Supression List
"下查看导入的电子邮件地址。
或者,我们可以使用以下命令:
aws sesv2 list-suppressed-destinations
它返回我们账户的账户级别Supression List
中的所有电子邮件地址
现在,让我们看看账户Supression List
的实际效果。尝试向上一步中Supression地址发送电子邮件。
要使用特定配置集发送电子邮件,使用--configuration-set
参数
如果我们已正确配置了事件通知和 Supression List,会收到一个"Bounce"事件,内容类似于以下内容:
{
"eventType": "Bounce",
"bounce": {
"feedbackId": "010001873fdfac35-112345bd-5ce6-4174-b615-730287c292dc-000000",
"bounceType": "Permanent",
"bounceSubType": "OnAccountSuppressionList",
"bouncedRecipients": [{
"emailAddress": "recipient@example.com",
"action": "failed",
"status": "5.1.1",
"diagnosticCode": "Amazon SES did not send the message to this address because it is on the suppression list for your account. For more information about removing addresses from the suppression list, see the Amazon SES Developer Guide at https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-email-suppression-list.html"
}],
"timestamp": "2023-04-02T02:50:36.052Z",
"reportingMTA": "dns; amazonses.com"
...