使用 Amazon SES v2 CreateContactList API 创建联系列表:语法、参数与 Weekly Mailer 场景实战
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文围绕 Amazon Simple Email Service (SES) v2 的CreateContactListAPI 展开系统讲解其 HTTP 请求语法、请求体参数ContactListName、Description、Tags、Topics、响应行为与异常处理并结合本仓库中的 SES v2 Coupon Newsletter 周报邮件场景weekly mailer与其 Java 工作流实现 中的真实调用代码说明如何通过联系列表实现订阅者管理、批量发送与退订Unsubscribe机制。读完本文你将掌握CreateContactList的完整调用方式以及联系列表在 SES v2 订阅邮件体系中的定位与最佳实践。一、联系列表在 SES v2 周报邮件场景中的角色在 weekly mailer 场景规格说明书 中整个工作流被划分为「准备应用 → 收集订阅者邮箱 → 发送优惠券周报 → 监控 → 清理」五个阶段其中联系列表Contact List是所有阶段的枢纽准备阶段调用CreateContactList创建名为weekly-coupons-newsletter的联系列表收集订阅者调用CreateContact把订阅者邮箱加入该联系列表发送周报调用ListContacts从该联系列表拉取全部订阅者逐个SendEmail退订合规SendEmail时通过ListManagementOptions.ContactListName指向同一联系列表使 SES 自动填充退订链接{{amazonSESUnsubscribeUrl}}与退订头List-Unsubscribe清理阶段调用DeleteContactList一次性删除联系列表及其全部联系人。也就是说CreateContactList是整个周报邮件体系的数据基座没有联系列表就无从建立订阅者集合也无法启用 SES 原生的列表退订管理能力。二、API 概览与请求语法CreateContactList用于在 SES v2 中创建一个联系列表——一个用于存放邮件订阅者contacts的容器后续可通过CreateContact向其添加联系人并在发送邮件时通过ListManagementOptions引用它。从 API 参考文档 可知其 HTTP 请求语法如下POST /v2/email/contact-lists HTTP/1.1 Content-type: application/json { ContactListName: string, Description: string, Tags: [ { Key: string, Value: string } ], Topics: [ { DefaultSubscriptionStatus: string, Description: string, DisplayName: string, TopicName: string } ] }该操作不使用任何 URI 查询参数全部配置通过 JSON 请求体Request Body传入。请求目标路径POST /v2/email/contact-lists对应 SES v2 控制平面control plane端点在实际使用 AWS SDK 时上述 HTTP 调用会被封装为 SDK 客户端方法如 Java 中的SesV2Client.createContactList。三、请求体参数详解以下参数完整继承自 API 参考文档并补充了在场景中的实际用法。3.1 ContactListName必填类型String必填是说明联系列表的名称。该名称是联系列表在账户内的唯一标识后续的CreateContact、ListContacts、SendEmail通过ListManagementOptions和DeleteContactList都要靠它引用列表。在本仓库的周报邮件场景中列表名被固化为常量private static final String CONTACT_LIST_NAME weekly-coupons-newsletter;见 NewsletterWorkflow.java 中的定义。该名称贯穿整个工作流——创建联系、查询联系、发送周报时的退订管理、以及最后的清理删除全部使用同一个名字保证引用一致性。3.2 Description可选类型String必填否说明对联系列表用途的描述性文本例如「Weekly Coupons Newsletter subscribers」。它不影响任何功能逻辑主要用于在 SES 控制台与管理中识别列表用途。3.3 Tags可选类型Array of Tag objects必填否说明与联系列表关联的标签tag每个标签对象包含KeyString标签键ValueString标签值。标签可用于成本分配、资源管理与控制台筛选。需要说明的是本仓库的 Java 工作流实现中创建联系列表时未设置 Tags只传入了ContactListName说明 Tags 是可选增强项。3.4 Topics可选类型Array of Topic objects必填否说明联系列表内的兴趣分组、主题或标签。一个联系列表可以包含多个 Topics用于细分订阅者兴趣例如「科技」「生鲜」「家电」每个联系人可通过CreateContact时的TopicPreferences单独设置对某个 Topic 的订阅状态。每个 Topic 对象包含四个字段字段类型说明DefaultSubscriptionStatusString联系人未显式设置偏好时的默认订阅状态如OPT_IN/OPT_OUTDescriptionString对该主题的描述DisplayNameString主题的展示名称面向用户的友好名称TopicNameString主题名称程序内引用标识默认值提示从实现细节看本仓库 Java 示例仅设置了contactListName其余可选字段均使用 SDK 默认值如果你的业务需要多主题细分与基于主题的退订应在Topics中显式定义各主题并为每个主题指定合理的DefaultSubscriptionStatus推荐OPT_IN即用户需主动确认订阅符合合规最佳实践。四、响应语法与行为HTTP/1.1 200成功行为如果操作成功服务端返回HTTP 200且响应体为空an empty HTTP body。与CreateContact、CreateEmailTemplate等创建类操作一致SES v2 在创建成功后不返回资源详情开发者只需通过后续的ListContacts或 SES 控制台确认资源已创建。五、错误处理CreateContactList可能返回以下错误各错误的 HTTP 状态码如下异常HTTP 状态码含义AlreadyExistsException400请求指定的联系列表已存在BadRequestException400请求输入无效如名称非法、JSON 格式错误LimitExceededException400联系列表数量超过账户配额上限TooManyRequestsException429请求过于频繁触发限流在 场景规格说明书 中针对其中两类错误给出了明确的处理策略AlreadyExistsException如果联系列表已存在例如重复运行脚本跳过创建步骤继续执行后续操作该错误可安全忽略LimitExceededException如果联系列表数量已达账户上限终止工作流并告知用户已达联系列表数量上限。这一策略在 Java 实现 中有完整对应CreateContactListRequest createContactListRequest CreateContactListRequest.builder() .contactListName(contactListName) .build(); sesClient.createContactList(createContactListRequest); System.out.println(Contact list created: contactListName); } catch (AlreadyExistsException e) { System.out.println(Contact list already exists, skipping creation: weekly-coupons-newsletter); } catch (LimitExceededException e) { System.err.println(Limit for contact lists has been exceeded.); throw e; }注意 Java SDK 中抛出的是AlreadyExistsException属于可忽略的幂等性处理而LimitExceededException直接throw使工作流失败退出。这种「可重入脚本」设计保证场景可多次安全运行不会因残留资源而中断。六、在周报邮件工作流中的完整调用链CreateContactList并非孤立操作它与同场景的其他 API 共同构成订阅邮件闭环。以下是本仓库 weekly mailer 场景中各操作与联系列表的关系均来自 API 参考文档集CreateContactList→ 创建容器本文主角CreateContact→ 向weekly-coupons-newsletter添加联系人参考其中EmailAddress必填SendEmail欢迎邮件Simple 格式→ 使用纯文本/HTML 内容直接发送SendEmail周报Templated 格式→ 通过ListManagementOptions.ContactListName指向联系列表SES 自动填充退订链接与退订头参考.listManagementOptions(ListManagementOptions.builder() .contactListName(CONTACT_LIST_NAME) .build())ListContacts→ 遍历列表内全部订阅者逐一发送周报DeleteContactList→ 清理阶段一次性删除列表及全部联系人。Java 工作流中创建联系列表的完整代码片段来源try { String contactListName CONTACT_LIST_NAME; CreateContactListRequest createContactListRequest CreateContactListRequest.builder() .contactListName(contactListName) .build(); sesClient.createContactList(createContactListRequest); System.out.println(Contact list created: contactListName); } catch (AlreadyExistsException e) { System.out.println(Contact list already exists, skipping creation: weekly-coupons-newsletter); } catch (LimitExceededException e) { System.err.println(Limit for contact lists has been exceeded.); throw e; }七、实践要点与注意事项综合 API 参考文档 与 场景说明使用CreateContactList时有以下要点名称即标识ContactListName是后续所有引用的锚点务必在脚本内固化为常量如weekly-coupons-newsletter避免散落魔法字符串导致引用错乱。幂等处理脚本需捕获AlreadyExistsException并跳过保证可重复执行周报邮件场景的「清理后重跑」也依赖这一点。配额意识LimitExceededException表示已达账户联系列表上限需要先删除无用列表或提升配额。退订合规发送批量邮件时务必通过ListManagementOptions关联联系列表让 SES 自动注入退订链接与List-Unsubscribe头遵循批量邮件最佳实践。多主题支持若需要按兴趣分组发送与按主题退订在创建时就规划好Topics及每个主题的DefaultSubscriptionStatus。沙盒限制如果账户处于 SES 沙盒环境收件人地址必须经过验证且每封邮件之间建议间隔场景中为 2 秒以避免限流——这也是为何场景使用子地址subaddress如userses-weekly-newsletter-1example.com来用最小邮箱数量演示联系列表功能的原因。八、相关资源场景总览 README周报邮件场景规格说明书Java 工作流完整实现CreateContact API 参考SendEmail API 参考含 ListManagementOptionsCreateEmailTemplate API 参考周报邮件 HTML 模板示例含{{#coupons}}占位符SendEmail 使用的示例优惠券数据Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐ATVOSS Sub 减法算子详解基于表达式模板的张量与标量减法编程指南ATVOSS Sub 减法算子详解基于表达式模板的张量与标量减法编程指南 ATVOSSAscend C Templates for Vector Opera示例工程教程后端使用 AWS SDK for .NET 构建 Amazon SES v2 优惠券新闻邮件工作流从联系人列表到模板化群发使用 AWS SDK for .NET 构建 Amazon SES v2 优惠券新闻邮件工作流从联系人列表到模板化群发 Amazon SES v2 API 是示例工程教程后端使用 .NET 与 Amazon SES v2 构建优惠券新闻通讯工作流SESv2 NewsLetterWorkflow 实战指南使用 .NET 与 Amazon SES v2 构建优惠券新闻通讯工作流SESv2 NewsLetterWorkflow 实战指南 本篇指南以 AWS 官方示例工程教程后端上一篇Wan2.2-S2V-14B的模型测试自动化CI/CD流程中的推理质量检查下一篇显存爆炸终结EfficientNet-PyTorch训练时CPU与GPU内存平衡实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考