

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用模板通过 Amazon SES API 发送个性化电子邮件
<a name="send-personalized-email-api"></a>

在 Amazon SES 中，您可以使用*存储的模板*或*内联模板*来发送模板化电子邮件。
+ **存储的模板**：指通过使用 Amazon SES v2 API 中的 `CreateEmailTemplate` 操作创建并保存在 SES 中的 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) 资源。该模板包含电子邮件的主题和正文，其中包含与书面内容内联的变量（占位符）。存储模板的名称以及模板中占位符变量的动态数据在调用 `SendEmail` 或 `SendBulkEmail` v2 API 操作时提供。

  *存储的模板*可以轻松重复使用，并且可以在发送类似类型的电子邮件时为您节省时间和精力。您无需从头开始创建每封电子邮件，只需创建一次基本结构和设计，然后只需更新模板中的动态内容。
+ **内联模板**：不使用 `Template` 资源，而是在调用 `SendEmail` 或 `SendBulkEmail` v2 API 操作时，提供包含与书面内容内联的变量（占位符）的电子邮件主题和正文以及这些占位符变量的值。

  *内联模板*通过消除在 SES 账户中管理模板资源的需要来简化批量电子邮件发送过程，并通过允许您将模板内容直接包含在应用程序逻辑中来简化集成过程。它们不计入每个 20,000 个模板的限制。 AWS 区域

使用*存储的模板*时适用以下限制：
+ 每个模板中最多可以创建 20,000 个电子邮件模板 AWS 区域。
+ 每个模板的大小最多为 500 KB（包括文本和 HTML 部分）。

使用*内联模板*时适用以下限制：
+ 每个输入 JSON 文件的大小最多为 1 MB，包括文本和 HTML 部分。

以下内容适用于*存储的*和*内联模板*：
+ 可以使用的替换变量数量没有限制。
+ 在对 `SendBulkEmail` 操作的每次调用中，您可以将电子邮件发送到最多 50 个目标对象。该[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)对象可以包含**ToAddresses**CcAddresses****、和中定义的多个收件人**BccAddresses**。您可以在单次 v2 API 调用中联系的目标数可能受您的账户的最大发送速率限制。有关更多信息，请参阅 [管理您的 Amazon SES 发送限制](manage-sending-quotas.md)。

本章包含使用*存储的模板*和*内联模板*的示例过程。

**注意**  
本节中的过程假定您已安装和配置 AWS CLI。有关安装和配置的更多信息 AWS CLI，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com/cli/latest/userguide/)。

## （可选）第 1 部分：设置呈现失败事件通知
<a name="send-personalized-email-set-up-notifications"></a>

 如果您发送一封包含无效的个性化内容的电子邮件，那么 Amazon SES 可能接受该邮件，但无法传递它。因此，如果您计划发送个性化电子邮件，则应将 SES 配置为通过 Amazon SNS 发送呈现失败事件通知。当您收到呈现失败事件通知时，您可以验证哪些邮件包含无效的内容、修复问题，然后重新发送邮件。

此部分中的过程可选，不过强烈建议使用。

**配置呈现失败事件通知**

1. 创建 Amazon SNS 主题。有关操作步骤，请参阅《Amazon Simple Notification Service 开发人员指南》**中的[创建主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)。

1. 订阅 Amazon SNS 主题。例如，如果您希望通过电子邮件接收呈现失败通知，请使用电子邮件端点 (即，您的电子邮件地址) 订阅主题。

   有关操作步骤，请参阅《Amazon Simple Notification Service 开发人员指南》**中的[订阅主题](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html)。

1. 完成[针对事件发布设置 Amazon SNS 事件目标](event-publishing-add-event-destination-sns.md)中的操作步骤来设置您的配置集，以将呈现失败事件发送到您的 Amazon SNS 主题。

## （可选）第 2 部分：创建电子邮件模板
<a name="send-personalized-email-create-template"></a>

如果您打算使用*存储的模板*，本节将向您展示如何使用 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) SES v2 API 操作来创建模板。如果您要使用*内联模板*，则可跳过该步骤。

此过程假定您已安装和配置 AWS CLI。有关安装和配置的更多信息 AWS CLI，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com/cli/latest/userguide/)。

**创建模板**

1. 在文本编辑器中，创建一个新文件并粘贴以下代码，根据需要对其进行自定义。

   ```
   {
       "TemplateName": "MyTemplate",
       "TemplateContent": {
           "Subject": "Greetings, {{name}}!",
           "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
           "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
       }
   }
   ```

   此代码包含以下属性：
   + **TemplateName**— `Template` 资源的名称。当您发送电子邮件时，您将引用此名称。
   + **TemplateContent**— 用于存放以下属性的容器：
     + **主题** – 电子邮件的主题行。此属性可能包含替换标签。这些标签使用以下格式：`{{tagname}}`。当您发送电子邮件时，您可以为每个目标的 `tagname` 指定一个值。
     + **Html**：电子邮件的 HTML 正文。此属性可能包含替换标签。前面的示例包含两个标签：`{{name}}` 和 `{{favoriteanimal}}`。
     + **Text**：电子邮件的文本正文。电子邮件客户端不显示 HTML 内容的收件人将会看到此版本的电子邮件。此属性还可能包含替换标签。

1. 自定义前面的示例以满足您的需求，然后将该文件另存为 {{mytemplate.json}}。

1. 在命令行中键入以下命令，使用 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) v2 API 操作创建新的模板：

   ```
   aws sesv2 create-email-template --cli-input-json file://{{mytemplate.json}}
   ```

## 第 3 部分：发送个性化电子邮件
<a name="send-personalized-email-api-operations"></a>

您可以使用以下两个 SES v2 API 操作来发送使用*存储的模板*或*内联模板*的电子邮件：
+ [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) 操作适用于向单个目标对象发送自定义电子邮件。v2 API [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)对象可以包含*ToAddresses*CcAddresses**、和*BccAddresses*属性。这些可以以任何组合使用，并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。
+ [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) 操作对于在对 v2 API 的单次调用中将唯一电子邮件发送到多个目标对象很有用。

本节提供了如何通过这两个 AWS CLI 发送操作使用发送模板化电子邮件的示例。

### 将模板化电子邮件发送到单个目标对象
<a name="send-templated-email-single-destination"></a>

您可以使用 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) 操作向单个目标对象中定义的一个或多个收件人发送电子邮件。[https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) 对象中的所有收件人都会收到同一电子邮件。

**将模板化电子邮件发送到单个目标对象**

1. 根据您是想使用*存储的模板*还是*内联模板*，选择相应的代码示例粘贴到文本编辑器中，并根据需要进行自定义。

------
#### [ Stored template code example ]

   请注意，您在上一步中创建的模板被引用为`TemplateName`参数的值。*MyTemplate*

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   此代码包含以下属性：
   + **FromEmailAddress**— 发件人的电子邮件地址。
   + **目标**-包含在*ToAddresses*、*CcAddresses*和*BccAddresses*属性中定义的电子邮件收件人的对象。这些可以以任何组合使用，并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。
   + **TemplateName**— 要应用于电子邮件的`Template`资源名称。
   + **TemplateData**— 包含键值对的转义的 JSON 字符串。键对应于存储模板中 `TemplateContent` 属性定义的变量，例如 `{{name}}`。值表示用来替换变量的内容。
   + **ConfigurationSetName**— 发送电子邮件时要使用的配置集的名称。
**注意**  
我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息，请参阅 [（可选）第 1 部分：设置呈现失败事件通知](#send-personalized-email-set-up-notifications)。

------
#### [ Inline template code example ]

   请注意，`TemplateContent` 属性（通常会在*存储的模板*中定义）正在与 `TemplateData` 属性一起*内联*定义，这使其成为*内联模板*。

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "Destination": {
           "ToAddresses": [
               "alejandro.rosalez@example.com", "jimmy.jet@example.com"
           ]
       },
       "Content": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"Alejandro\", \"favoriteanimal\": \"alligator\" }"
           }
       },
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   此代码包含以下属性：
   + **FromEmailAddress**— 发件人的电子邮件地址。
   + **目标**-包含在*ToAddresses*、*CcAddresses*和*BccAddresses*属性中定义的电子邮件收件人的对象。这些可以以任何组合使用，并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。
   + **TemplateContent**— 用于存放以下属性的容器：
     + **主题** – 电子邮件的主题行。此属性可能包含替换标签。这些标签使用以下格式：`{{tagname}}`。当您发送电子邮件时，您可以为每个目标的 `tagname` 指定一个值。
     + **Html**：电子邮件的 HTML 正文。此属性可能包含替换标签。前面的示例包含两个标签：`{{name}}` 和 `{{favoriteanimal}}`。
     + **Text**：电子邮件的文本正文。电子邮件客户端不显示 HTML 内容的收件人将会看到此版本的电子邮件。此属性还可能包含替换标签。
   + **TemplateData**— 包含键值对的转义的 JSON 字符串。这些键对应于本文件中 `TemplateContent` 属性定义的变量，例如 `{{name}}`。值表示用来替换变量的内容。
   + **ConfigurationSetName**— 发送电子邮件时要使用的配置集的名称。
**注意**  
我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息，请参阅 [（可选）第 1 部分：设置呈现失败事件通知](#send-personalized-email-set-up-notifications)。

------

1. 自定义前面的示例以满足您的需求，然后将该文件另存为 {{myemail.json}}。

1. 在命令行键入以下 v2 API 命令，发送电子邮件：

   ```
   aws sesv2 send-email --cli-input-json file://{{myemail.json}}
   ```

### 将模板化电子邮件发送到多个目标对象
<a name="send-templated-email-multiple-destinations"></a>

您可以使用 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) 操作在单次调用 SES v2 API 时向多个目标对象发送电子邮件。SES 会向每个 [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) 对象中的收件人发送唯一的电子邮件。

**将模板化电子邮件发送到多个目标对象**

1. 根据您是想使用*存储的模板*还是*内联模板*，选择相应的代码示例粘贴到文本编辑器中，并根据需要进行自定义。

------
#### [ Stored template code example ]

   请注意，您在上一步中创建的模板被引用为`TemplateName`参数的值。*MyTemplate*

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateName": "MyTemplate",
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   此代码包含以下属性：
   + **FromEmailAddress**— 发件人的电子邮件地址。
   + **DefaultContent**— 包含`TemplateName`和对象的 JSON `TemplateData` 对象。
   + **TemplateName**— 要应用于电子邮件的`Template`资源名称。
   + **TemplateData**— 包含键值对，如果对象在属性中包含空的 JSON `ReplacementEmailContent` 对象`{}`，则将使用这些`ReplacementTemplateData`键值对。
   + **BulkEmailEntries**— 包含一个或多个`Destination`对象的数组。
   + **目标**-包含在*ToAddresses*、*CcAddresses*和*BccAddresses*属性中定义的电子邮件收件人的对象。这些可以以任何组合使用，并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。
   + **ReplacementTemplateData**— 包含键值对的转义的 JSON 字符串。键与模板中的变量（例如 `{{name}}`）对应。值表示用来替换电子邮件中的变量的内容。（如果此处的 JSON 字符串为空，由 `{}` 表示，则将使用在 `DefaultContent` 对象内的 `TemplateData` 属性中定义的键值对。）
   + **ConfigurationSetName**— 发送电子邮件时要使用的配置集的名称。
**注意**  
我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息，请参阅 [（可选）第 1 部分：设置呈现失败事件通知](#send-personalized-email-set-up-notifications)。

------
#### [ Inline template code example ]

   请注意，`TemplateContent` 属性（通常会在*存储的模板*中定义）正在与 `TemplateData` 属性一起*内联*定义，这使其成为*内联模板*。

   ```
   {
       "FromEmailAddress": "Mary Major <mary.major@example.com>",
       "DefaultContent": {
           "Template": {
               "TemplateContent": {
                   "Subject": "Greetings, {{name}}!",
                   "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
                   "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
               },
               "TemplateData": "{ \"name\":\"friend\", \"favoriteanimal\":\"unknown\" }"
           }
       },
       "BulkEmailEntries": [
           {
               "Destination": {
                   "ToAddresses": [
                       "anaya.iyengar@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Anaya\", \"favoriteanimal\":\"angelfish\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "liu.jie@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Liu\", \"favoriteanimal\":\"lion\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "shirley.rodriguez@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{ \"name\":\"Shirley\", \"favoriteanimal\":\"shark\" }"
                   }
               }
           },
           {
               "Destination": {
                   "ToAddresses": [
                       "richard.roe@example.com"
                   ]
               },
               "ReplacementEmailContent": {
                   "ReplacementTemplate": {
                       "ReplacementTemplateData": "{}"
                   }
               }
           }
       ],
       "ConfigurationSetName": "ConfigSet"
   }
   ```

   此代码包含以下属性：
   + **FromEmailAddress**— 发件人的电子邮件地址。
   + **DefaultContent**— 包含`TemplateContent`和对象的 JSON `TemplateData` 对象。
   + **TemplateContent**— 用于存放以下属性的容器：
     + **主题** – 电子邮件的主题行。此属性可能包含替换标签。这些标签使用以下格式：`{{tagname}}`。当您发送电子邮件时，您可以为每个目标的 `tagname` 指定一个值。
     + **Html**：电子邮件的 HTML 正文。此属性可能包含替换标签。前面的示例包含两个标签：`{{name}}` 和 `{{favoriteanimal}}`。
     + **Text**：电子邮件的文本正文。电子邮件客户端不显示 HTML 内容的收件人将会看到此版本的电子邮件。此属性还可能包含替换标签。
   + **TemplateData**— 包含键值对，如果对象在属性中包含空的 JSON `ReplacementEmailContent` 对象`{}`，则将使用这些`ReplacementTemplateData`键值对。
   + **BulkEmailEntries**— 包含一个或多个`Destination`对象的数组。
   + **目标**-包含在*ToAddresses*、*CcAddresses*和*BccAddresses*属性中定义的电子邮件收件人的对象。这些可以以任何组合使用，并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。
   + **ReplacementTemplateData**— 包含键值对的转义的 JSON 字符串。这些键对应于本文件中 `TemplateContent` 属性定义的变量，例如 `{{name}}`。值表示用来替换电子邮件中的变量的内容。（如果此处的 JSON 字符串为空，由 `{}` 表示，则将使用在 `DefaultContent` 对象内的 `TemplateData` 属性中定义的键值对。）
   + **ConfigurationSetName**— 发送电子邮件时要使用的配置集的名称。
**注意**  
我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息，请参阅 [（可选）第 1 部分：设置呈现失败事件通知](#send-personalized-email-set-up-notifications)。

------

1. 更改上一步骤代码中的值以满足您的需求，然后将该文件另存为 {{mybulkemail.json}}。

1. 在命令行中，键入以下 v2 API 命令来发送批量电子邮件：

   ```
   aws sesv2 send-bulk-email --cli-input-json file://{{mybulkemail.json}}
   ```