如何在Amazon SES中为单个收件人收集指标并集成至发送逻辑
解决方案:为SES事务性邮件按收件人收集单独指标
1. 为每个收件人收集单独指标的核心思路
要实现按单个收件人(邮箱)拆分指标,你需要用到SES的自定义标签(Custom Tags),配合配置集将标签作为指标维度发送到CloudWatch。具体逻辑如下:
- 先确认你的配置集已经启用了需要追踪的事件(打开、点击、渲染失败等),并且在事件设置里勾选了包含自定义标签——只有这样,CloudWatch的指标才会带上你定义的标签维度。
- 给每一封发送给单个收件人的邮件添加自定义标签:标签的
Key可以设为recipient_email这类明确的名称,Value直接用该收件人的邮箱地址。这样CloudWatch就会把每个收件人的指标按这个标签维度单独存储,不再是聚合数据。
2. 集成到现有邮件发送代码
你的现有send_email方法是批量发送给多个收件人,这种情况下无法给每个收件人单独设置标签(因为send_email的Tags参数是全局的,会统一应用到所有收件人)。所以需要调整代码逻辑,改为逐个给每个收件人发送邮件,并在每次调用时添加对应收件人的专属标签。
修改后的代码示例
def send_email(self, subject, charset="UTF-8"): """发送邮件给每个收件人,附带收件人自定义标签""" # 创建SES客户端 client = boto3.client('ses', region_name=self._aws_region) # 遍历每个收件人,单独发送邮件 for recipient in self._recipient: try: # 发送邮件,添加自定义标签 response = client.send_email( Destination={ 'ToAddresses': [recipient], # 改为单个收件人 }, Message={ 'Body': { 'Html': { 'Charset': charset, 'Data': self._html_content.getvalue(), }, }, 'Subject': { 'Charset': charset, 'Data': subject, }, }, Source=self.sender, ConfigurationSetName="test", # 保留你的配置集 # 添加自定义标签,将收件人邮箱作为标签值 Tags=[ { 'Name': 'recipient_email', 'Value': recipient }, ] ) print(f"邮件已发送至 {recipient}! 消息ID: {response['ResponseMetadata']['RequestId']}") except ClientError as e: print(f"发送至 {recipient} 失败: {e.response['Error']['Message']}")
关键说明
- 把原有的批量
ToAddresses改为循环遍历单个收件人,确保每一封邮件都能携带专属的收件人标签。 Tags参数是列表格式,你可以添加多个标签,但这里只需要一个标识收件人的标签就足够拆分指标了。- 保持原有的
ConfigurationSetName参数不变,你的自动标签配置依然会生效,只是新增了自定义的收件人标签维度。
3. 在CloudWatch中查看单个收件人的指标
发送邮件后,你可以在CloudWatch里按以下步骤找到单个收件人的指标:
- 打开CloudWatch控制台,进入指标页面。
- 左侧导航栏选择SES,再选择按配置集和标签。
- 筛选
ConfigurationSetName为test,然后选择recipient_email标签对应的具体邮箱值,就能看到该收件人的打开、点击等单独指标了。
内容的提问来源于stack exchange,提问作者Kafka4PresidentNow
相关产品推荐
相关产品推荐

