

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de plantillas para el envío de correo electrónico personalizado con la API de Amazon SES
<a name="send-personalized-email-api"></a>

En Amazon SES, puede enviar correos electrónicos con plantillas mediante una *plantilla almacenada* o una *plantilla en línea*.
+ **Plantilla almacenada**: hace referencia al recurso [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) que se crea y guarda en SES mediante la operación `CreateEmailTemplate` de la API v2 de Amazon SES. La plantilla contiene el asunto y el cuerpo del correo electrónico y contiene variables (marcadores de posición) en línea con el contenido escrito. El nombre de la plantilla almacenada y los datos dinámicos de las variables de marcador de posición de la plantilla se proporcionan al llamar a las operaciones de la API v2 `SendEmail` o `SendBulkEmail`.

  *Plantillas almacenadas*: se pueden reutilizar fácilmente y pueden ahorrarle tiempo y esfuerzo al enviar tipos de correos electrónicos similares. En lugar de crear cada correo electrónico desde cero, solo necesita crear la estructura base y el diseño una vez y, a continuación, actualizar simplemente el contenido dinámico de la plantilla.
+ **Plantilla en línea**: no se utiliza el recurso `Template`, sino que se proporcionan el asunto y el cuerpo del correo electrónico que contiene variables (marcadores de posición) en línea con el contenido escrito, junto con los valores de esas variables de marcador de posición, al llamar a las operaciones de la API v2 `SendEmail` o `SendBulkEmail`.

  Las *plantillas integradas* simplifican el proceso de envío masivo de correos electrónicos al eliminar la necesidad de administrar los recursos de plantillas en su cuenta de SES y simplifican el proceso de integración al permitirle incluir el contenido de la plantilla directamente en la lógica de la aplicación. No se tienen en cuenta para el límite de 20 000 plantillas por plantilla. Región de AWS

Se aplican los siguientes límites cuando se utilizan *plantillas almacenadas*:
+ Puedes crear hasta 20 000 plantillas de correo electrónico en cada una. Región de AWS
+ Cada plantilla puede tener un tamaño de hasta 500 KB, incluidos el texto y las partes en HTML.

Se aplican los siguientes límites cuando se utilizan *plantillas en línea*:
+ Cada archivo JSON de entrada puede tener hasta 1 MB de tamaño, incluido el texto y las partes HTML.

Lo siguiente se aplica a las plantillas *almacenadas* y *en línea*:
+ No hay límites en cuanto al número de variables de reemplazo que se pueden utilizar.
+ Puede enviar correo electrónico a un máximo de 50 objetos de destino en cada llamada a la operación `SendBulkEmail`. El [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)objeto puede contener varios destinatarios definidos en **ToAddresses**CcAddresses****, y **BccAddresses**. El número de destinos con los que puede ponerse en contacto en una única llamada a la API v2 podría estar limitado por la tasa de envío máxima de su cuenta. Para obtener más información, consulte [Administración de sus límites de envío de Amazon SES](manage-sending-quotas.md).

En este capítulo se incluyen procedimientos con ejemplos para usar *plantillas almacenadas* y *plantillas en línea*.

**nota**  
En los procedimientos que se describen en esta sección, se da por hecho que ya se ha instalado y configurado la AWS CLI. Para obtener más información sobre la instalación y configuración del AWS CLI, consulte la [Guía del AWS Command Line Interface usuario](https://docs.aws.amazon.com/cli/latest/userguide/).

## (Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado
<a name="send-personalized-email-set-up-notifications"></a>

 Si envía un correo electrónico que contiene contenido de personalización no válido, Amazon SES puede aceptar inicialmente el mensaje, pero puede no ser capaz de enviarlo. Por este motivo, si tiene previsto enviar correo electrónico personalizado, debe configurar SES para enviar notificaciones de eventos de errores de presentación a través de Amazon SNS. Cuando reciba una notificación de evento de error de presentación, puede identificar qué mensaje incluía el contenido no válido, solucionar los problemas y enviar el mensaje de nuevo.

Es absolutamente recomendable que realice el procedimiento de esta sección, aunque sea opcional.

**Para configurar notificaciones de eventos de errores de presentación**

1. Crear un tema de Amazon SNS Para obtener información acerca de los procedimientos, consulte [Creación de un tema](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

1. Suscríbase al tema de Amazon SNS. Por ejemplo, si desea recibir notificaciones de errores de presentación por correo electrónico, suscriba un punto de enlace de correo electrónico (es decir, su dirección de correo electrónico) al tema.

   Para obtener información acerca de los procedimientos, consulte [Suscribirse a un tema](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

1. Realice los procedimientos de [Configuración de un destino de eventos de Amazon SNS para la publicación de eventos](event-publishing-add-event-destination-sns.md) para configurar los conjuntos de configuración con el objetivo de publicar eventos de errores de presentación en su tema de Amazon SNS.

## (Opcional) Parte 2: creación de una plantilla de correo electrónico
<a name="send-personalized-email-create-template"></a>

Si piensa utilizar una *plantilla almacenada*, en esta sección se mostrará cómo utilizar la operación de la API v2 de SES [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) para crear la plantilla. Puede omitir este paso si desea utilizar si desea utilizar una *plantilla en línea*.

En este procedimiento se presupone que ya ha instalado y configurado la AWS CLI. Para obtener más información sobre la instalación y configuración del AWS CLI, consulte la [Guía del AWS Command Line Interface usuario](https://docs.aws.amazon.com/cli/latest/userguide/).

**Para crear la plantilla**

1. En un editor de texto, cree un nuevo archivo y pegue el siguiente código para personalizarlo según sus necesidades.

   ```
   {
       "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>"
       }
   }
   ```

   Este código contiene las siguientes propiedades:
   + **TemplateName**— El nombre del `Template` recurso. Cuando envíe el correo electrónico, consulte este nombre.
   + **TemplateContent**— Un contenedor para los siguientes atributos:
     + **Asunto**: el asunto del mensaje de correo electrónico. Esta propiedad podría contener etiquetas de sustitución. Estas etiquetas utilizan el siguiente formato: `{{tagname}}`. Cuando envíe el correo electrónico, puede especificar un valor para `tagname` para cada destino.
     + **Html**: cuerpo HTML del correo electrónico. Esta propiedad podría contener etiquetas de sustitución. El ejemplo anterior incluye dos etiquetas: `{{name}}` y `{{favoriteanimal}}`.
     + **Text**: cuerpo de texto del correo electrónico. Los destinatarios cuyos clientes de correo electrónico no muestran el correo electrónico en HTML ven este contenido del correo electrónico. Esta propiedad podría contener etiquetas de sustitución.

1. Personalice el ejemplo anterior para adaptarse a sus necesidades y, a continuación, guarde el archivo como *mytemplate.json*.

1. En la línea de comandos, escriba el siguiente comando para crear una nueva plantilla utilizando la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) de la API v2:

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

## Parte 3: Enviar el correo electrónico personalizado
<a name="send-personalized-email-api-operations"></a>

Puede usar las dos operaciones siguientes de la API v2 de SES para enviar correos electrónicos mediante *plantillas almacenadas* o *plantillas en línea*:
+ La operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) es útil para enviar un correo electrónico personalizado a un único objeto de destino. El [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html)objeto de la API v2 puede contener las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
+ La operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) resulta útil para enviar correos electrónicos únicos a varios objetos de destino en una única llamada a la API v2.

En esta sección se proporcionan ejemplos de cómo utilizarlos AWS CLI para enviar correos electrónicos con plantillas mediante estas dos operaciones de envío.

### Envío de correo electrónico de plantilla a un único objeto de destino
<a name="send-templated-email-single-destination"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) para enviar un correo electrónico a uno o varios destinatarios definidos en un único objeto de destino. Todos los destinatarios del objeto [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html) recibirán el mismo correo electrónico.

**Cómo enviar un correo electrónico de plantilla a un objeto de destino único**

1. Dependiendo de si desea utilizar una *plantilla almacenada* o una *plantilla en línea*, seleccione el ejemplo de código correspondiente para pegarlo en un editor de texto y personalícelo según sus necesidades.

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

   Observe que se hace referencia a la plantilla que creó en el paso anterior como valor del `TemplateName` parámetro. *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"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **TemplateName**— El nombre del `Template` recurso que se va a aplicar al correo electrónico.
   + **TemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables definidas en las propiedades `TemplateContent` de la plantilla almacenada, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye a las variables.
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

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

   Observe que las propiedades `TemplateContent` (que normalmente se definirían en una *plantilla almacenada*) se definen *en línea* junto con la propiedad `TemplateData`, lo que la convierte en una *plantilla en línea*.

   ```
   {
       "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"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **TemplateContent**— Un contenedor para los siguientes atributos:
     + **Asunto**: el asunto del mensaje de correo electrónico. Esta propiedad podría contener etiquetas de sustitución. Estas etiquetas utilizan el siguiente formato: `{{tagname}}`. Cuando envíe el correo electrónico, puede especificar un valor para `tagname` para cada destino.
     + **Html**: cuerpo HTML del correo electrónico. Esta propiedad podría contener etiquetas de sustitución. El ejemplo anterior incluye dos etiquetas: `{{name}}` y `{{favoriteanimal}}`.
     + **Text**: cuerpo de texto del correo electrónico. Los destinatarios cuyos clientes de correo electrónico no muestran el correo electrónico en HTML ven este contenido del correo electrónico. Esta propiedad podría contener etiquetas de sustitución.
   + **TemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables definidas en las propiedades `TemplateContent` de este archivo, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye a las variables.
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

------

1. Personalice el ejemplo anterior para adaptarse a sus necesidades y, a continuación, guarde el archivo como *myemail.json*.

1. En la línea de comandos, escriba el siguiente comando de la API v2 para enviar el correo electrónico:

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

### Envío de correo electrónico con plantilla a varios objetos de destino
<a name="send-templated-email-multiple-destinations"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) para enviar un correo electrónico a varios destinos en una llamada única al API v2 de SES. SES envía un correo electrónico único al destinatario o destinatarios en cada objeto de [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Destination.html).

**Cómo enviar un correo electrónico de plantilla a varios objetos de destino**

1. Dependiendo de si desea utilizar una *plantilla almacenada* o una *plantilla en línea*, seleccione el ejemplo de código correspondiente para pegarlo en un editor de texto y personalícelo según sus necesidades.

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

   Observe que se hace referencia a la plantilla que creó en el paso anterior como valor del `TemplateName` parámetro. *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"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **DefaultContent**— Un objeto JSON que contiene los `TemplateData` objetos `TemplateName` y. 
   + **TemplateName**— El nombre del `Template` recurso que se va a aplicar al correo electrónico.
   + **TemplateData**— Contiene pares clave-valor que se utilizarán si el `ReplacementEmailContent` objeto contiene un objeto JSON vacío`{}`, en la `ReplacementTemplateData` propiedad.
   + **BulkEmailEntries**— Una matriz que contiene uno o más `Destination` objetos.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **ReplacementTemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables de la plantilla, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye las variables en el correo electrónico. (Si la cadena JSON aquí está vacía, lo que se indica mediante `{}`, se utilizarán los pares clave-valor definidos en la propiedad `TemplateData` dentro del objeto `DefaultContent`).
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

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

   Observe que las propiedades `TemplateContent` (que normalmente se definirían en una *plantilla almacenada*) se definen *en línea* junto con la propiedad `TemplateData`, lo que la convierte en una *plantilla en línea*.

   ```
   {
       "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"
   }
   ```

   Este código contiene las siguientes propiedades:
   + **FromEmailAddress**— La dirección de correo electrónico del remitente.
   + **DefaultContent**— Un objeto JSON que contiene los `TemplateData` objetos `TemplateContent` y. 
   + **TemplateContent**— Un contenedor para los siguientes atributos:
     + **Asunto**: el asunto del mensaje de correo electrónico. Esta propiedad podría contener etiquetas de sustitución. Estas etiquetas utilizan el siguiente formato: `{{tagname}}`. Cuando envíe el correo electrónico, puede especificar un valor para `tagname` para cada destino.
     + **Html**: cuerpo HTML del correo electrónico. Esta propiedad podría contener etiquetas de sustitución. El ejemplo anterior incluye dos etiquetas: `{{name}}` y `{{favoriteanimal}}`.
     + **Text**: cuerpo de texto del correo electrónico. Los destinatarios cuyos clientes de correo electrónico no muestran el correo electrónico en HTML ven este contenido del correo electrónico. Esta propiedad podría contener etiquetas de sustitución.
   + **TemplateData**— Contiene pares clave-valor que se utilizarán si el `ReplacementEmailContent` objeto contiene un objeto JSON vacío`{}`, en la `ReplacementTemplateData` propiedad.
   + **BulkEmailEntries**— Una matriz que contiene uno o más `Destination` objetos.
   + **Destino**: objeto que contiene los destinatarios del correo electrónico definidos en las *BccAddresses*propiedades *ToAddresses*CcAddresses**, y. Se pueden usar en cualquier combinación y pueden contener una o más direcciones de correo electrónico que recibirán el mismo correo electrónico.
   + **ReplacementTemplateData**— Una cadena JSON de escape que contiene pares clave-valor. Las claves corresponden a las variables definidas en las propiedades `TemplateContent` de este archivo, por ejemplo, `{{name}}`. Los valores representan el contenido que sustituye las variables en el correo electrónico. (Si la cadena JSON aquí está vacía, lo que se indica mediante `{}`, se utilizarán los pares clave-valor definidos en la propiedad `TemplateData` dentro del objeto `DefaultContent`).
   + **ConfigurationSetName**— El nombre del conjunto de configuraciones que se utilizará al enviar el correo electrónico.
**nota**  
Le recomendamos que utilice un conjunto de configuración que esté configurado para publicar eventos de errores de presentación en Amazon SNS. Para obtener más información, consulte [(Opcional) Parte 1: configuración de notificaciones de eventos de errores de renderizado](#send-personalized-email-set-up-notifications).

------

1. Cambie los valores del código del paso anterior según sus necesidades y, a continuación, guarde el archivo como *mybulkemail.json*.

1. En la línea de comandos, escriba el siguiente comando de la API v2 para enviar el correo masivo:

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

# Personalización avanzada del correo electrónico
<a name="send-personalized-email-advanced"></a>

 Si utiliza una *plantilla almacenada*, es decir, si ha creado un recurso [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) en Amazon SES mediante la operación `CreateEmailTemplate` con la API v2 de SES, puede aprovechar el sistema Handlebars para crear plantillas que incluyan características avanzadas, como atributos anidados, iteración de matrices, instrucciones condicionales básicas y la creación de parciales en línea. En esta sección se proporcionan ejemplos de estas características.

Handlebars incluye características adicionales además de las documentadas en esta sección. Para obtener más información, consulte [Built-In Helpers](https://handlebarsjs.com/guide/builtin-helpers.html) en [handlebarsjs.com](http://handlebarsjs.com).

**nota**  
SES no aplica secuencias de escape al contenido HTML cuando renderiza la plantilla HTML de un mensaje. Esto significa que si incluye datos introducidos por el usuario, como desde un formulario de contacto, tendrá que aplicar las secuencias de escape en el lado del cliente.

**Topics**
+ [Análisis de atributos anidados](#send-personalized-email-advanced-nested)
+ [Recorrido de listas en iteración](#send-personalized-email-advanced-iterating)
+ [Uso de instrucciones condicionales básicas](#send-personalized-email-advanced-conditionals)
+ [Creación de funciones parciales insertadas](#send-personalized-email-advanced-inline-partials)

## Análisis de atributos anidados
<a name="send-personalized-email-advanced-nested"></a>

Handlebars admite rutas anidadas, lo que facilita la organización de datos de clientes complejos y la referencia a esos datos en sus plantillas de correo electrónico.

Por ejemplo, puede organizar los datos de los destinatarios en varias categorías generales. Dentro de cada una de estas categorías, puede incluir información detallada. El siguiente ejemplo de código muestra un ejemplo de esta estructura para un único destinatario:

```
{
  "meta":{
    "userId":"51806220607"
  },
  "contact":{
    "firstName":"Anaya",
    "lastName":"Iyengar",
    "city":"Bengaluru",
    "country":"India",
    "postalCode":"560052"
  },
  "subscription":[
    {
      "interest":"Sports"
    },
    {
      "interest":"Travel"
    },
    {
      "interest":"Cooking"
    }
  ]
}
```

En sus plantillas de correo electrónico, puede hacer referencia a atributos anidados proporcionando el nombre del atributo principal, seguido de un punto (.), seguido del nombre del atributo para el que desea incluir el valor. Por ejemplo, si utiliza la estructura de datos que se muestra en el ejemplo anterior y desea incluir el nombre de cada destinatario en la plantilla de correo electrónico, incluya el siguiente texto en su plantilla de correo electrónico: `Hello {{contact.firstName}}!`

Handlebars puede analizar rutas que tengan varios niveles anidados, lo que le proporciona flexibilidad a la hora de estructurar los datos de la plantilla.

## Recorrido de listas en iteración
<a name="send-personalized-email-advanced-iterating"></a>

La función auxiliar `each` recorre en iteración los elementos de una matriz. El código siguiente es un ejemplo de una plantilla de correo electrónico que utiliza la función auxiliar `each` para crear una relación detallada de los intereses de cada destinatario.

```
{
  "Template": {
    "TemplateName": "Preferences",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>You have indicated that you are interested in receiving 
                   information about the following subjects:</p>
                 <ul>
                   {{#each subscription}}
                     <li>{{interest}}</li>
                   {{/each}}
                 </ul>
                 <p>You can change these settings at any time by visiting 
                    the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                    Preference Center</a>.</p>",
    "TextPart": "Your Preferences\n\nYou have indicated that you are interested in 
                 receiving information about the following subjects:\n
                 {{#each subscription}}
                   - {{interest}}\n
                 {{/each}}
                 \nYou can change these settings at any time by 
                 visiting the Preference Center at 
                 https://www.example.com/prefererences/i.aspx?id={{meta.userId}}"
  }
}
```

**importante**  
En el ejemplo de código anterior, los valores de los atributos `HtmlPart` y `TextPart` incluyen saltos de línea para facilitar la lectura del ejemplo. El archivo JSON de la plantilla no puede contener saltos de línea dentro de estos valores. Si ha copiado y pegado este ejemplo en su propio archivo JSON, elimine los saltos de línea y espacios adicionales de las secciones `HtmlPart` y `TextPart` antes de continuar.

Después de crear la plantilla, puede utilizar la operación `SendEmail` o `SendBulkEmail` para enviar correo electrónico a los destinatarios a través de esta plantilla. Siempre y cuando los destinatarios tengan al menos un valor en el objeto `Interests`, reciben un correo electrónico que incluye una relación detallada de sus intereses. El siguiente ejemplo muestra un archivo JSON que se puede utilizar para enviar correo electrónico a varios destinatarios mediante la plantilla anterior:

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Travel\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"},\"subscription\":[{\"interest\":\"Technology\"},{\"interest\":\"Politics\"}]}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

Cuando envíe un correo electrónico a los destinatarios indicados en el ejemplo anterior mediante la operación `SendBulkEmail`, recibirán un mensaje similar al ejemplo que se muestra en la siguiente imagen:

![\[Preferences notification listing Sports, Travel, and Cooking as selected interests.\]](http://docs.aws.amazon.com/es_es/ses/latest/dg/images/send-personalized-email-advanced-condition-interest.png)


## Uso de instrucciones condicionales básicas
<a name="send-personalized-email-advanced-conditionals"></a>

Esta sección se basa en el ejemplo descrito en la sección anterior. El ejemplo de la sección anterior utiliza la función auxiliar `each` para recorrer en iteración una lista de intereses. Sin embargo, los destinatarios para los que no se especifican intereses reciben un correo electrónico que contiene una lista vacía. Mediante la función auxiliar `{{if}}`, puede formatear el correo electrónico de forma distinta si un determinado atributo está presente en la plantilla de datos. El código siguiente utiliza la función auxiliar `{{if}}` para mostrar la lista con viñetas de la sección anterior si la matriz `Subscription` contiene algún valor. Si la matriz está vacía, se muestra un bloque de texto diferente.

```
{
  "Template": {
    "TemplateName": "Preferences2",
    "SubjectPart": "Subscription Preferences for {{contact.firstName}} {{contact.lastName}}",
    "HtmlPart": "<h1>Your Preferences</h1>
                 <p>Dear {{contact.firstName}},</p>
                 {{#if subscription}}
                   <p>You have indicated that you are interested in receiving 
                     information about the following subjects:</p>
                     <ul>
                     {{#each subscription}}
                       <li>{{interest}}</li>
                     {{/each}}
                     </ul>
                     <p>You can change these settings at any time by visiting 
                       the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                       Preference Center</a>.</p>
                 {{else}}
                   <p>Please update your subscription preferences by visiting 
                     the <a href=https://www.example.com/prefererences/i.aspx?id={{meta.userId}}>
                     Preference Center</a>.
                 {{/if}}",
    "TextPart": "Your Preferences\n\nDear {{contact.firstName}},\n\n
                 {{#if subscription}}
                   You have indicated that you are interested in receiving 
                   information about the following subjects:\n
                   {{#each subscription}}
                     - {{interest}}\n
                   {{/each}}
                   \nYou can change these settings at any time by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{else}}
                   Please update your subscription preferences by visiting the 
                   Preference Center at https://www.example.com/prefererences/i.aspx?id={{meta.userId}}.
                 {{/if}}"
  }
}
```

**importante**  
En el ejemplo de código anterior, los valores de los atributos `HtmlPart` y `TextPart` incluyen saltos de línea para facilitar la lectura del ejemplo. El archivo JSON de la plantilla no puede contener saltos de línea dentro de estos valores. Si ha copiado y pegado este ejemplo en su propio archivo JSON, elimine los saltos de línea y espacios adicionales de las secciones `HtmlPart` y `TextPart` antes de continuar.

El siguiente ejemplo muestra un archivo JSON que se puede utilizar para enviar correo electrónico a varios destinatarios mediante la plantilla anterior:

```
{
  "Source":"Sender Name <sender@example.com>",
  "Template":"Preferences2",
  "Destinations":[
    {
      "Destination":{
        "ToAddresses":[
          "anaya.iyengar@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"51806220607\"},\"contact\":{\"firstName\":\"Anaya\",\"lastName\":\"Iyengar\"},\"subscription\":[{\"interest\":\"Sports\"},{\"interest\":\"Cooking\"}]}"
      },
    {
      "Destination":{ 
        "ToAddresses":[
          "shirley.rodriguez@example.com"
        ]
      },
      "ReplacementTemplateData":"{\"meta\":{\"userId\":\"1981624758263\"},\"contact\":{\"firstName\":\"Shirley\",\"lastName\":\"Rodriguez\"}}"
    }
  ],
  "DefaultTemplateData":"{\"meta\":{\"userId\":\"\"},\"contact\":{\"firstName\":\"Friend\",\"lastName\":\"\"},\"subscription\":[]}"
}
```

En este ejemplo, el destinatario cuyos datos de la plantilla incluyen una lista de intereses recibe el mismo correo electrónico que el ejemplo mostrado en la sección anterior. Sin embargo, el destinatario cuyos datos de la plantilla no incluyen intereses, recibe un correo electrónico similar al ejemplo que se muestra en la siguiente imagen:

![\[Email message with header "Your Preferences" and text about updating subscription preferences.\]](http://docs.aws.amazon.com/es_es/ses/latest/dg/images/send-personalized-email-advanced-condition-nointerest.png)


## Creación de funciones parciales insertadas
<a name="send-personalized-email-advanced-inline-partials"></a>

Puede utilizar funciones parciales insertadas para simplificar las plantillas que incluyen cadenas repetidas. Por ejemplo, podría crear una función parcial insertada que incluyera el nombre del destinatario y, si está disponible, sus apellidos agregando el siguiente código al principio de la plantilla:

```
{{#* inline \"fullName\"}}{{firstName}}{{#if lastName}} {{lastName}}{{/if}}{{/inline}}\n
```

**nota**  
El carácter de nueva línea (`\n`) es necesario para separar el bloque `{{inline}}` del contenido de la plantilla. La nueva línea no se muestra en el resultado final.

Después de crear la función parcial `fullName`, puede incluirla en cualquier lugar de la plantilla añadiendo delante del nombre de la función parcial un signo mayor que (>) seguido de un espacio, como en el siguiente ejemplo: `{{> fullName}}`. Las funciones parciales insertadas no se transfieren entre las distintas partes del correo electrónico. Por ejemplo, si desea utilizar la misma función parcial insertada en la versión HTML y de texto del correo electrónico, debe definirla en las secciones `HtmlPart` y `TextPart`.

También puede utilizar funciones parciales insertadas cuando recorre en iteración matrices. Puede utilizar el siguiente código para crear una plantilla que utilice la función parcial insertada `fullName`. En este ejemplo, la función parcial insertada se aplica tanto al nombre del destinatario como a una matriz de otros nombres:

```
{
  "Template": {
    "TemplateName": "Preferences3",
    "SubjectPart": "{{firstName}}'s Subscription Preferences",
    "HtmlPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 <h1>Hello {{> fullName}}!</h1>
                 <p>You have listed the following people as your friends:</p>
                 <ul>
                 {{#each friends}}
                   <li>{{> fullName}}</li>
                 {{/each}}</ul>",
    "TextPart": "{{#* inline \"fullName\"}}
                   {{firstName}}{{#if lastName}} {{lastName}}{{/if}}
                 {{/inline~}}\n
                 Hello {{> fullName}}! You have listed the following people 
                 as your friends:\n
                 {{#each friends}}
                   - {{> fullName}}\n
                 {{/each}}"
  }
}
```

**importante**  
En el ejemplo de código anterior, los valores de los atributos `HtmlPart` y `TextPart` incluyen saltos de línea para facilitar la lectura del ejemplo. El archivo JSON de la plantilla no puede contener saltos de línea dentro de estos valores. Si ha copiado y pegado este ejemplo en su propio archivo JSON, elimine los saltos de línea y espacios adicionales de estas secciones.

# Administración de plantillas de correo electrónico
<a name="send-personalized-email-manage-templates"></a>

Además de [crear de plantillas de correo electrónico](send-personalized-email-api.md), también puede utilizar la API v2 de Amazon SES para actualizar o eliminar plantillas existentes, enumerar todas las plantillas existentes o ver el contenido de una plantilla. 

Esta sección contiene los procedimientos para utilizarlos AWS CLI para realizar tareas relacionadas con las plantillas de SES.

**nota**  
En los procedimientos que se describen en esta sección, se da por hecho que ya se ha instalado y configurado la AWS CLI. Para obtener más información sobre la instalación y configuración de AWS CLI, consulte la [Guía del AWS Command Line Interface usuario](https://docs.aws.amazon.com/cli/latest/userguide/).

## Visualización de una lista de plantillas de correo electrónico
<a name="send-personalized-email-manage-templates-list"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html) de la API v2 de SES para ver una lista de todas las plantillas de correo electrónico existentes.

**Para ver una lista de plantillas de correo electrónico**
+ En la línea de comandos, introduzca el comando siguiente:

  ```
  aws sesv2 list-email-templates
  ```

  Si hay plantillas de correo electrónico existentes en su cuenta de SES en la región actual, este comando devuelve una respuesta similar al siguiente ejemplo:

  ```
  {
      "TemplatesMetadata": [
          {
              "Name": "SpecialOffers",
              "CreatedTimestamp": "2020-08-05T16:04:12.640Z"
          },
          {
              "Name": "NewsAndUpdates",
              "CreatedTimestamp": "2019-10-03T20:03:34.574Z"
          }
      ]
  }
  ```

  Si no ha creado ninguna plantilla, el comando devuelve un objeto `TemplatesMetadata` sin miembros.

## Visualización del contenido de una plantilla de correo electrónico específica
<a name="send-personalized-email-manage-templates-get"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html) de la API v2 de SES para ver el contenido de una plantilla de correo electrónico específica.

**Para ver el contenido de una plantilla de correo electrónico**
+ En la línea de comandos, introduzca el comando siguiente:

  ```
  aws sesv2 get-email-template --template-name MyTemplate
  ```

  En el comando anterior, *MyTemplate* sustitúyalo por el nombre de la plantilla que desee ver.

  Si el nombre de la plantilla que ha proporcionado coincide con una plantilla existente en su cuenta de SES, este comando devuelve una respuesta similar al ejemplo siguiente:

  ```
  {
      "Template": {
          "TemplateName": "TestMessage",
          "SubjectPart": "Amazon SES Test Message",
          "TextPart": "Hello! This is the text part of the message.",
          "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
      }
  }
  ```

  Si el nombre de la plantilla que ha proporcionado no coincide con una plantilla existente en su cuenta de SES, el comando devuelve un error `NotFoundException`.

## Eliminación de una plantilla de correo electrónico
<a name="send-personalized-email-manage-templates-delete"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html) de la API v2 de SES para eliminar una plantilla de correo electrónico específica de la API de Amazon SES.

**Para eliminar una plantilla de correo electrónico**
+ En la línea de comandos, introduzca el comando siguiente:

  ```
  aws sesv2 delete-email-template --template-name MyTemplate
  ```

  En el comando anterior, *MyTemplate* sustituya por el nombre de la plantilla que desee eliminar.

  Este comando no proporciona ningún resultado. Puede comprobar que la plantilla se ha eliminado mediante la [GetTemplate](#send-personalized-email-manage-templates-get)operación.

## Actualización de una plantilla de correo electrónico
<a name="send-personalized-email-manage-templates-update"></a>

Puede utilizar la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html) de la API v2 de SES para actualizar una plantilla de correo electrónico existente en la API de Amazon SES. Por ejemplo, esta operación es útil si desea cambiar la línea de asunto de la plantilla de correo electrónico o si necesita modificar el cuerpo del mensaje en sí.

**Para actualizar una plantilla de correo electrónico**

1. Utilice el comando `GetEmailTemplate` para recuperar la plantilla existente al ingresar el siguiente comando en la línea de comandos:

   ```
   aws sesv2 get-email-template --template-name MyTemplate
   ```

   En el comando anterior, *MyTemplate* sustituya por el nombre de la plantilla que desee actualizar.

   Si el nombre de la plantilla que ha proporcionado coincide con una plantilla existente en su cuenta de SES, este comando devuelve una respuesta similar al ejemplo siguiente:

   ```
   {
       "Template": {
           "TemplateName": "TestMessage",
           "SubjectPart": "Amazon SES Test Message",
           "TextPart": "Hello! This is the text part of the message.",
           "HtmlPart": "<html>\n<body>\n<h2>Hello!</h2>\n<p>This is the HTML part of the message.</p></body>\n</html>"
       }
   }
   ```

1. En un editor de texto, cree un nuevo archivo. Pegue el resultado del comando anterior en el archivo.

1. Modifique la plantilla como sea necesario. Las líneas que se omitan se eliminarán de la plantilla. Por ejemplo, si solo desea cambiar la `SubjectPart` de la plantilla, aún debe incluir las propiedades `TextPart` y `HtmlPart`.

   Cuando haya terminado, guarde el archivo como `update_template.json`.

1. En la línea de comandos, introduzca el comando siguiente:

   ```
   aws sesv2 update-email-template --cli-input-json file://path/to/update_template.json
   ```

   En el comando anterior, *path/to/update\$1template.json* sustituya por la ruta del `update_template.json` archivo que creó en el paso anterior.

   Si la plantilla se actualiza correctamente, este comando no proporcionará ningún resultado. Para verificar que la plantilla se haya actualizado, utilice la operación [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html).

   Si la plantilla especificada no existe, este comando devuelve un error `TemplateDoesNotExist`. Si la plantilla no contiene ninguna de las propiedades `TextPart` o `HtmlPart` (o ambas), este comando devuelve un error `InvalidParameterValue`. 