如何通过SendGrid API更新邮箱地址关联的联系人列表?
解决SendGrid联系人列表替换问题
问题原因
你使用的PUT /v3/marketing/contacts接口中,list_ids参数的默认行为是将联系人追加到指定列表,而非替换已关联的所有列表。因此第二次请求仅将联系人添加到ZZZZZ列表,并未移除之前的XXXXX和YYYYY,导致最终三个列表关联。
解决方案
方案1:分两步操作(移除旧列表 + 添加新列表)
1. 移除联系人从旧列表
使用POST /v3/marketing/contacts/remove-from-lists接口,指定要移除的邮箱和旧列表ID:
curl -X POST "https://api.sendgrid.com/v3/marketing/contacts/remove-from-lists" \ --header "Authorization: Bearer <<YOUR_API_KEY_HERE>>" \ --header "Content-Type: application/json" \ --data '{"list_ids":["057204d4-755b-4364-a0d1-XXXXXX", "057204d4-755b-4364-a0d1-YYYYY"], "emails": ["annahamilton@example.org"]}'
2. 添加联系人到新列表
使用原PUT请求将联系人添加到目标列表:
curl -X PUT "https://api.sendgrid.com/v3/marketing/contacts" \ --header "Authorization: Bearer <<YOUR_API_KEY_HERE>>" \ --header "Content-Type: application/json" \ --data '{"list_ids":["057204d4-755b-4364-a0d1-ZZZZZ"], "contacts": [{"email": "annahamilton@example.org"}]}'
方案2:单请求完成替换
在同一个PUT请求中,通过delete_list_ids参数指定要移除的旧列表,list_ids指定要添加的新列表,一次性完成替换:
curl -X PUT "https://api.sendgrid.com/v3/marketing/contacts" \ --header "Authorization: Bearer <<YOUR_API_KEY_HERE>>" \ --header "Content-Type: application/json" \ --data '{ "list_ids": ["057204d4-755b-4364-a0d1-ZZZZZ"], "delete_list_ids": ["057204d4-755b-4364-a0d1-XXXXXX", "057204d4-755b-4364-a0d1-YYYYY"], "contacts": [{"email": "annahamilton@example.org"}] }'
注意事项
- 若不确定联系人当前关联的所有列表,可先通过
POST /v3/marketing/contacts/search/emails接口查询获取list_ids。 - 确保API密钥拥有
marketing.contacts的读写权限,避免权限错误。
内容的提问来源于stack exchange,提问作者Azad
相关产品推荐
相关产品推荐

