使用模板通过 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 部分:创建电子邮件模板

如果您打算使用存储的模板,本节将向您展示如何使用 CreateEmailTemplate SES 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— 包含以下属性的容器:

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

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

      • Text:电子邮件的文本正文。电子邮件客户端不显示 HTML 内容的收件人将会看到此版本的电子邮件。此属性还可能包含替换标签。

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

  3. 在命令行中键入以下命令,使用 CreateEmailTemplate v2 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— 包含以下属性的容器:

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

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

      • Text:电子邮件的文本正文。电子邮件客户端不显示 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

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

您可以使用 SendBulkEmail 操作在单次调用 SES v2 API 时向多个目标对象发送电子邮件。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— 包含以下属性的容器:

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

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

      • Text:电子邮件的文本正文。电子邮件客户端不显示 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