使用账户级别Supression List

使用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页面:

image-20240721110057948

将电子邮件地址添加到账户级别Supression List:

image-20240721110148729

上面操作有对应的命令:

aws sesv2 put-suppressed-destination --email-address "recipient@example.com" --reason "BOUNCE"

添加完成后的效果:

image-20240721110243087

检查电子邮件地址是否在Supression List

检查特定电子邮件地址是否在账户级别Supression List中:

aws sesv2 get-suppressed-destination --email-address "recipient@example.com"

此命令检查recipient@example.com是否在Supression List中,如果存在,则返回记录。

如果成功,我们应该会收到一个JSON文件,概述了目标的EmailAddressReason

image-20240721110402499

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

批量添加邮箱到Supression List

上面的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中为对象命名的名称。

授予SES读取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创建导入作业

使用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的地址发送测试邮件

现在,让我们看看账户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"
...

image-20240721111829992