You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS SESv2批量发邮件时如何自动调用联系人属性填充模板?

解决SES批量邮件自动填充联系人属性的方案

针对你遇到的问题——用list_contacts拿不到联系人的AttributesData,逐个调用get_contact又太慢的情况,给你几个实用的解决思路:

1. 用SES营销活动(Campaign)替代手动批量发送

这是最省心的方案,SES的营销活动可以直接关联你的联系人列表,自动读取每个联系人的属性来填充模板:

  • 先在SES控制台创建好你的邮件模板(保留{{Name}}变量)
  • 创建新营销活动,选择目标联系人列表,并指定筛选条件(比如仅"Announcements"主题的订阅用户)
  • 活动运行时,SES会自动拉取符合条件的联系人AttributesData,把{{Name}}替换为实际名称,完全不需要手动处理数据和调用API

2. 批量导出联系人列表到S3,再读取数据发送

如果必须用send_bulk_email API手动发送,可以先批量导出联系人数据:

  • 通过SES控制台或export_contacts API,把目标联系人列表导出到S3桶,导出文件会包含所有联系人的EmailAddress和AttributesData
  • 从S3下载导出的CSV/JSON文件,解析出每个联系人的邮箱和Name属性
  • 将数据整理成send_bulk_email要求的BulkEmailEntries格式,一次性批量发送,效率远高于逐个调用get_contact

3. 异步批量调用get_contact(备选方案)

如果上面两种方式不适用,可以用多线程/异步请求批量调用get_contact来减少耗时:

  • 把list_contacts返回的邮箱列表分成若干批次
  • 用Python的concurrent.futures.ThreadPoolExecutor或异步库同时发起多个请求,并行获取联系人属性

代码示例(多线程批量获取属性)

import boto3
import json
from concurrent.futures import ThreadPoolExecutor

ses_client = boto3.client('sesv2')

def get_contact_attrs(email):
    try:
        resp = ses_client.get_contact(ContactListName='myusers', EmailAddress=email)
        attrs = json.loads(resp['AttributesData'])
        return {'email': email, 'name': attrs.get('Name', 'Unknown')}
    except Exception as e:
        print(f"获取{email}属性失败: {e}")
        return {'email': email, 'name': 'Unknown'}

# 从list_contacts获取的目标邮箱列表
email_list = ['john@gmail.com', 'jane@gmail.com', ...]

# 批量并行获取属性
with ThreadPoolExecutor(max_workers=50) as executor:
    contact_data = list(executor.map(get_contact_attrs, email_list))

# 构造批量邮件参数
bulk_entries = []
for data in contact_data:
    bulk_entries.append({
        'Destination': {'ToAddresses': [data['email']]},
        'ReplacementEmailContent': {
            'ReplacementTemplate': {
                'ReplacementTemplateData': json.dumps({"Name": data['name']})
            }
        }
    })

# 发送批量邮件
response = ses_client.send_bulk_email(
    FromEmailAddress='no-reply@mysite.xyz',
    ReplyToAddresses=['feedback@mysite.xyz'],
    DefaultContent={
        'Template': {
            'TemplateName': 'mytemplate',
            'TemplateData': json.dumps({"Name": "Unknown"})
        }
    },
    BulkEmailEntries=bulk_entries
)

内容的提问来源于stack exchange,提问作者AlwaysLearning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:02:45