在Amazon SES中,当使用屏蔽列表时,只有列入屏蔽列表中的收件人会被阻止。如果消息带有多个收件人,其中一个或多个不在屏蔽列表中,则该消息仍会被发送。以下是一个可能的解决方法,可以通过Lambda函数结合SES的事件模型实现:
创建一个Lambda函数,并将其添加到Amazon SES中,作为SMTP接收规则集的事件处理程序。
在Lambda函数中,解析传入的事件,获取消息的所有收件人。
获取SES中的屏蔽列表,并将其存储在一个变量中。
import boto3
client = boto3.client('ses')
response = client.list_receipt_filters()
filters = response['Filters']
suppression_list = []
for f in filters:
if f['Name'] == 'Block':
suppression_list = f['IpFilter']['Cidr']
根据屏蔽列表中的内容,过滤掉收件人列表中任何一个包含在屏蔽列表中的收件人。
recipients = event['content']['recipients']
filtered_recipients = []
for r in recipients:
allowed = True
for s in suppression_list:
if s in r:
allowed = False
break
if allowed:
filtered_recipients.append(r)
如果过滤后的收件人列表为空,则说明所有收件人都在屏蔽列表中,此时中止发送。
if not filtered_recipients:
return {
'statusCode': 400,
'body': 'All recipients are blocked'
}
否则,将过滤后的收件人列表重新插入事件,并将其传递给SES,继续发送消息。
event['content