使用模板通过 Amazon SES API 发送个性化电子邮件 - Amazon Simple Email Service

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

使用模板通过 Amazon SES API 发送个性化电子邮件

在 Amazon SES 中,您可以使用存储的模板或内联模板发送模板化电子邮件。

  • 存储的模板-指使用 Amazon SES v2 API 中的CreateEmailTemplate操作在 SES 中创建和保存的Template资源。该模板包含电子邮件的主题和正文,其中包含与书面内容一致的变量(占位符)。调用SendEmailSendBulkEmail v2 API 操作时,会提供存储模板的名称和模板中占位符变量的动态数据。

    存储的模板可以轻松重复使用,并且可以在发送类似类型的电子邮件时为您节省时间和精力。无需从头开始创建每封电子邮件,只需创建基本结构并设计一次,然后只需更新模板中的动态内容即可。

  • 内联模板 — 不使用Template资源,而是在调用SendEmailSendBulkEmail v2 API 操作时,会提供电子邮件的主题和正文,其中包含与书面内容内联的变量(占位符)以及这些占位符变量的值。

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

使用存储的模板时适用以下限制:

  • 每个模板中最多可以创建 20,000 个电子邮件模板 AWS 区域。

  • 每个模板的大小最多为 500 KB (包括文本和 HTML 部分)。

使用内联模板时适用以下限制:

  • 每个输入 JSON 文件的大小可达 1 MB,包括文本和 HTML 部分。

以下内容适用于存储模板和内联模板

  • 可以使用的替换变量的数量没有限制。

  • 每次调用SendBulkEmail操作时,您最多可以向 50 个目标对象发送电子邮件。该Destination对象可以包含ToAddressesCcAddresses、和中定义的多个收件人BccAddresses。您单次调用 v2 API 时可以联系的目的地数量可能会受到您账户的最大发送速率的限制。有关更多信息,请参阅 管理您的 Amazon SES 发送限制

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

注意

本节中的过程假定您已安装和配置 AWS CLI。有关安装和配置的更多信息 AWS CLI,请参阅《AWS Command Line Interface 用户指南》

(可选)第 1 部分:设置渲染失败事件通知

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

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

配置呈现失败事件通知
  1. 创建 Amazon SNS 主题。有关操作步骤,请参阅《Amazon Simple Notification Service 开发人员指南》中的创建主题

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

    有关操作步骤,请参阅《Amazon Simple Notification Service 开发人员指南》中的订阅主题

  3. 完成针对事件发布设置 Amazon SNS 事件目标中的操作步骤来设置您的配置集,以将呈现失败事件发送到您的 Amazon SNS 主题。

(可选)第 2 部分:创建电子邮件模板

如果您打算使用存储的模板,本节将向您展示如何使用 CreateEmailTemplateSES v2 API 操作来创建模板。如果要使用内联模板,可以跳过此步骤。

此过程假定您已安装和配置 AWS CLI。有关安装和配置的更多信息 AWS CLI,请参阅《AWS Command Line Interface 用户指南》

创建模板
  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>" } }

    此代码包含以下属性:

    • TemplateNameTemplate 资源的名称。当您发送电子邮件时,您将引用此名称。

    • TemplateContent— 用于存放以下属性的容器:

      • SubjectPart – 电子邮件的主题行。此属性可能包含替换标签。这些标签使用以下格式:{{tagname}}。当您发送电子邮件时,您可以为每个目标的 tagname 指定一个值。

      • HtmlPart— 电子邮件的 HTML 正文。此属性可能包含替换标签。前面的示例包含两个标签:{{name}}{{favoriteanimal}}

      • TextPart— 电子邮件的正文。电子邮件客户端未显示 HTML 内容的收件人将看到此版本的电子邮件。此属性也可能包含替换标签。

  2. 自定义前面的示例以满足您的需求,然后将该文件另存为 mytemplate.json

  3. 在命令行中,键入以下命令以使用 CreateEmailTemplatev2 API 操作创建新模板:

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

第 3 部分:发送个性化电子邮件

您可以使用以下两个 SES v2 API 操作使用存储的模板或内联模板发送电子邮件:

  • SendEmail操作对于向单个目标对象发送自定义电子邮件非常有用。v2 API Destination对象可以包含ToAddressesCcAddresses、和BccAddresses属性。它们可以任意组合使用,并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。

  • SendBulkEmail操作对于通过对 v2 API 的单次调用向多个目标对象发送唯一的电子邮件非常有用。

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

向单个目标对象发送模板化电子邮件

您可以使用该SendEmail操作向在单个目标对象中定义的一个或多个收件人发送电子邮件。Destination 对象中的所有收件人都会收到同一电子邮件。

向单个目标对象发送模板化电子邮件
  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— 发件人的电子邮件地址。

    • 目标-包含在ToAddressesCcAddressesBccAddresses属性中定义的电子邮件收件人的对象。它们可以任意组合使用,并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。

    • TemplateName— 要应用于电子邮件的Template资源名称。

    • TemplateData— 包含键值对的转义的 JSON 字符串。这些键对应于存储模板的TemplateContent属性中定义的变量,例如{{name}}。这些值表示替换变量的内容。

    • ConfigurationSetName— 发送电子邮件时要使用的配置集的名称。

      注意

      我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息,请参阅 (可选)第 1 部分:设置渲染失败事件通知

    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— 发件人的电子邮件地址。

    • 目标-包含在ToAddressesCcAddressesBccAddresses属性中定义的电子邮件收件人的对象。它们可以任意组合使用,并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。

    • TemplateContent— 用于存放以下属性的容器:

      • SubjectPart – 电子邮件的主题行。此属性可能包含替换标签。这些标签使用以下格式:{{tagname}}。当您发送电子邮件时,您可以为每个目标的 tagname 指定一个值。

      • HtmlPart— 电子邮件的 HTML 正文。此属性可能包含替换标签。前面的示例包含两个标签:{{name}}{{favoriteanimal}}

      • TextPart— 电子邮件的正文。电子邮件客户端未显示 HTML 内容的收件人将看到此版本的电子邮件。此属性也可能包含替换标签。

    • TemplateData— 包含键值对的转义的 JSON 字符串。这些键对应于此文件中TemplateContent属性中定义的变量,例如{{name}}。这些值表示替换变量的内容。

    • ConfigurationSetName— 发送电子邮件时要使用的配置集的名称。

      注意

      我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息,请参阅 (可选)第 1 部分:设置渲染失败事件通知

  2. 自定义前面的示例以满足您的需求,然后将该文件另存为 myemail.json

  3. 在命令行中,键入以下 v2 API 命令以发送电子邮件:

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

向多个目标对象发送模板化电子邮件

您只需调用 SES v2 API,即可使用该SendBulkEmail操作向多个目标对象发送电子邮件。SES 向每个Destination对象中的一个或多个收件人发送一封唯一的电子邮件。

向多个目标对象发送模板化电子邮件
  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对象的数组。

    • 目标-包含在ToAddressesCcAddressesBccAddresses属性中定义的电子邮件收件人的对象。它们可以任意组合使用,并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。

    • ReplacementTemplateData— 包含键值对的转义的 JSON 字符串。例如,这些键对应于模板中的变量{{name}}。值表示用来替换电子邮件中的变量的内容。(如果此处的 JSON 字符串为空(由表示){},则将使用DefaultContent对象中TemplateData属性中定义的键值对。)

    • ConfigurationSetName— 发送电子邮件时要使用的配置集的名称。

      注意

      我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息,请参阅 (可选)第 1 部分:设置渲染失败事件通知

    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— 用于存放以下属性的容器:

      • SubjectPart – 电子邮件的主题行。此属性可能包含替换标签。这些标签使用以下格式:{{tagname}}。当您发送电子邮件时,您可以为每个目标的 tagname 指定一个值。

      • HtmlPart— 电子邮件的 HTML 正文。此属性可能包含替换标签。前面的示例包含两个标签:{{name}}{{favoriteanimal}}

      • TextPart— 电子邮件的正文。电子邮件客户端未显示 HTML 内容的收件人将看到此版本的电子邮件。此属性也可能包含替换标签。

    • TemplateData— 包含键值对,如果对象在属性中包含空的 JSON ReplacementEmailContent 对象{},则将使用这些ReplacementTemplateData键值对。

    • BulkEmailEntries— 包含一个或多个Destination对象的数组。

    • 目标-包含在ToAddressesCcAddressesBccAddresses属性中定义的电子邮件收件人的对象。它们可以任意组合使用,并且可以包含一个或多个将接收相同电子邮件的电子邮件地址。

    • ReplacementTemplateData— 包含键值对的转义的 JSON 字符串。这些键对应于此文件中TemplateContent属性中定义的变量,例如{{name}}。值表示用来替换电子邮件中的变量的内容。(如果此处的 JSON 字符串为空(由表示){},则将使用DefaultContent对象中TemplateData属性中定义的键值对。)

    • ConfigurationSetName— 发送电子邮件时要使用的配置集的名称。

      注意

      我们建议您使用配置为将呈现失败事件发布到 Amazon SNS 的配置集。有关更多信息,请参阅 (可选)第 1 部分:设置渲染失败事件通知

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

  3. 在命令行中,键入以下 v2 API 命令以发送批量电子邮件:

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