

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Como usar modelos para enviar e-mails personalizados com a API do Amazon SES
<a name="send-personalized-email-api"></a>

No Amazon SES, você pode enviar e-mails com base em modelo usando um *modelo armazenado* ou usando um *modelo em linha*.
+ **Modelo armazenado**: refere-se ao 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 é criado e salvo no SES usando a operação `CreateEmailTemplate` na API v2 do Amazon SES. O modelo contém o assunto e o corpo do e-mail contendo variáveis (espaços reservados) em linha com o conteúdo escrito. O nome do modelo armazenado e os dados dinâmicos das variáveis de espaço reservado no modelo são fornecidos ao chamar as operações `SendEmail` ou `SendBulkEmail` da API v2.

  Os *modelos armazenados* podem ser facilmente reutilizados e podem economizar tempo e esforço ao enviar tipos semelhantes de e-mails. Em vez de criar cada e-mail do zero, basta criar a estrutura básica e o design uma vez, depois atualizar o conteúdo dinâmico dentro do modelo.
+ **Modelo em linha**: o recurso `Template` não é usado. Em vez disso, o assunto e o corpo do e-mail contendo variáveis (espaços reservados) em linha com o conteúdo escrito, além dos valores dessas variáveis de espaço reservado, são fornecidos ao chamar as operações `SendEmail` ou `SendBulkEmail` da API v2.

  Os *modelos em linha* simplificam o processo de envio de e-mails em massa, eliminando a necessidade de gerenciar recursos de modelo em sua conta do SES, e simplificam o processo de integração, permitindo que você inclua o conteúdo do modelo diretamente na lógica da aplicação. Eles não contam contra o limite de 20.000 modelos por. Região da AWS

Os seguintes limites se aplicam ao usar *modelos armazenados*:
+ Você pode criar até 20.000 modelos de e-mail em cada um Região da AWS.
+ Cada modelo pode ter até 500 KB, incluindo as partes de texto e de HTML.

O limite a seguir se aplica ao usar *modelos em linha*:
+ Cada arquivo JSON de entrada pode ter até 1 MB, incluindo as partes de texto e HTML.

O seguinte se aplica aos *modelos *armazenados* e embutidos*:
+ Não há limites para o número de variáveis de substituição que podem ser usadas.
+ Você pode enviar e-mails para até 50 objetos de destino em cada chamada para a operação `SendBulkEmail`. O [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 pode conter vários destinatários definidos em **ToAddresses**CcAddresses****, e. **BccAddresses** O número de destinos com os quais você pode entrar em contato em uma única chamada à API v2 pode ser limitado pela taxa máxima de envio da sua conta. Para obter mais informações, consulte [Gerenciamento de limites do envio do Amazon SES](manage-sending-quotas.md).

Este capítulo inclui procedimentos com exemplos para usar *modelos armazenados* e *modelos em linha*.

**nota**  
Os procedimentos desta seção também pressupõem que você já instalou e configurou a AWS CLI. Para obter mais informações sobre como instalar e configurar o AWS CLI, consulte o [Guia do AWS Command Line Interface usuário](https://docs.aws.amazon.com/cli/latest/userguide/).

## (Opcional) Parte 1: Configurar notificações de eventos de falha de renderização
<a name="send-personalized-email-set-up-notifications"></a>

 Se você enviar um e-mail que contenha conteúdo de personalização inválido, o Amazon SES pode até aceitar a mensagem, mas não poderá entregá-la. Por esse motivo, se você planeja enviar e-mails personalizados, configure o SES para enviar notificações de eventos de falha de renderização pelo Amazon SNS. Ao receber uma notificação de evento de Falha de renderização, você pode identificar qual mensagem continha o conteúdo inválido, corrigir os problemas e enviar a mensagem novamente.

O procedimento nesta seção é opcional, mas altamente recomendado.

**Para configurar notificações de eventos de Falha de renderização**

1. Crie um tópico do Amazon SNS. Para obter procedimentos, consulte [Criar um tópico](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*.

1. Assine o tópico do Amazon SNS. Por exemplo, se você quiser receber notificações de Falha de renderização por e-mail, inscreva um endpoint de e-mail (ou seja, seu endereço de e-mail) no tópico.

   Para obter os procedimentos, consulte [Assinar um tópico](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) no *Guia do desenvolvedor do Amazon Simple Notification Service*.

1. Execute os procedimentos em [Configure um destino de eventos do Amazon SNS para publicação de eventos](event-publishing-add-event-destination-sns.md) para configurar os conjuntos de configurações para publicação de eventos de falha de processamento no seu tópico sobre o Amazon SNS.

## (Opcional) Parte 2: Criar um modelo de e-mail
<a name="send-personalized-email-create-template"></a>

Se você pretende usar um *modelo armazenado*, esta seção mostrará como usar a operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) da API v2 do SES para criar o modelo. Você pode pular esta etapa se deseja usar um *modelo em linha*.

Esse procedimento pressupõe que você já tenha instalado e configurado a AWS CLI. Para obter mais informações sobre como instalar e configurar o AWS CLI, consulte o [Guia do AWS Command Line Interface usuário](https://docs.aws.amazon.com/cli/latest/userguide/).

**Para criar o modelo**

1. Em um editor de texto, crie um arquivo e cole o código a seguir, personalizando-o conforme necessário.

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

   Esse código contém as seguintes propriedades:
   + **TemplateName**— O nome do `Template` recurso. Quando você enviar o e-mail, consulte este nome.
   + **TemplateContent**— Um contêiner para os seguintes atributos:
     + **Assunto**: a linha de assunto do e-mail. Essa propriedade pode conter tags de substituição. Essas tags usam o seguinte formato: `{{tagname}}`. Quando você envia o e-mail, pode especificar um valor para `tagname` de cada destino.
     + **Html**: o corpo HTML do e-mail. Essa propriedade pode conter tags de substituição. O exemplo anterior inclui duas tags: `{{name}}` e `{{favoriteanimal}}`.
     + **Text**: o corpo de texto do e-mail. Os destinatários cujos clientes de e-mail não exibem conteúdo HTML verão esta versão do e-mail. Essa propriedade também pode conter tags de substituição.

1. Personalize o exemplo anterior de acordo com as suas necessidades e salve o arquivo como *mytemplate.json*.

1. Na linha de comando, digite o seguinte comando para criar um modelo usando a operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_CreateEmailTemplate.html) da API v2:

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

## Parte 3: Enviar os e-mails personalizados
<a name="send-personalized-email-api-operations"></a>

Você pode usar as duas operações da API v2 do SES a seguir para enviar e-mails usando *modelos armazenados* ou *modelos em linha*:
+ A operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html) é útil para enviar um e-mail personalizado para um único objeto de destino. O [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 da API v2 pode conter as *BccAddresses*propriedades *ToAddresses*CcAddresses**, e. Elas podem ser usadas em qualquer combinação e podem conter um ou mais endereços de e-mail que receberão o mesmo e-mail.
+ A operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html) é útil para envio de e-mails exclusivos a vários objetos de destino em uma única chamada para a API v2.

Esta seção fornece exemplos de como usar o AWS CLI para enviar e-mails modelados usando essas duas operações de envio.

### Enviar e-mails com base em modelo a um único objeto de destino
<a name="send-templated-email-single-destination"></a>

Você pode usar a operação [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 um e-mail a um ou mais destinatários definidos em um único objeto de destino. Todos os destinatários no 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) receberão o mesmo e-mail.

**Como enviar um e-mail com base em modelo a um único objeto de destino**

1. Dependendo se você deseja usar um *modelo armazenado* ou um *modelo em linha*, selecione o exemplo de código respectivo para colar em um editor de texto, personalizando-o conforme necessário.

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

   Observe que o modelo que você criou na etapa anterior, *MyTemplate*, está sendo referenciado como o valor do `TemplateName` parâmetro.

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

   Esse código contém as seguintes propriedades:
   + **FromEmailAddress**— O endereço de e-mail do remetente.
   + **Destino** — Um objeto contendo os destinatários de e-mail definidos nas *BccAddresses*propriedades *ToAddresses*CcAddresses**, e. Elas podem ser usadas em qualquer combinação e podem conter um ou mais endereços de e-mail que receberão o mesmo e-mail.
   + **TemplateName**— O nome do `Template` recurso a ser aplicado ao e-mail.
   + **TemplateData**— Uma string JSON com escape que contém pares de valores-chave. As chaves correspondem às variáveis definidas nas propriedades `TemplateContent` do modelo armazenado, por exemplo, `{{name}}`. Os valores representam o conteúdo que substitui as variáveis.
   + **ConfigurationSetName**— O nome do conjunto de configurações a ser usado ao enviar o e-mail.
**nota**  
Recomendamos que você use um conjunto de configurações definido para publicar eventos de falha de processamento no Amazon SNS. Para obter mais informações, consulte [(Opcional) Parte 1: Configurar notificações de eventos de falha de renderização](#send-personalized-email-set-up-notifications).

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

   Observe que as propriedades `TemplateContent` (que normalmente seriam definidas em um *modelo armazenado*) estão sendo definidas *em linha*, junto com a propriedade `TemplateData`, o que faz dele um *modelo em linha*.

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

   Esse código contém as seguintes propriedades:
   + **FromEmailAddress**— O endereço de e-mail do remetente.
   + **Destino** — Um objeto contendo os destinatários de e-mail definidos nas *BccAddresses*propriedades *ToAddresses*CcAddresses**, e. Elas podem ser usadas em qualquer combinação e podem conter um ou mais endereços de e-mail que receberão o mesmo e-mail.
   + **TemplateContent**— Um contêiner para os seguintes atributos:
     + **Assunto**: a linha de assunto do e-mail. Essa propriedade pode conter tags de substituição. Essas tags usam o seguinte formato: `{{tagname}}`. Quando você envia o e-mail, pode especificar um valor para `tagname` de cada destino.
     + **Html**: o corpo HTML do e-mail. Essa propriedade pode conter tags de substituição. O exemplo anterior inclui duas tags: `{{name}}` e `{{favoriteanimal}}`.
     + **Text**: o corpo de texto do e-mail. Os destinatários cujos clientes de e-mail não exibem conteúdo HTML verão esta versão do e-mail. Essa propriedade também pode conter tags de substituição.
   + **TemplateData**— Uma string JSON com escape que contém pares de valores-chave. As chaves correspondem às variáveis definidas nas propriedades `TemplateContent` desse arquivo, por exemplo, `{{name}}`. Os valores representam o conteúdo que substitui as variáveis.
   + **ConfigurationSetName**— O nome do conjunto de configurações a ser usado ao enviar o e-mail.
**nota**  
Recomendamos que você use um conjunto de configurações definido para publicar eventos de falha de processamento no Amazon SNS. Para obter mais informações, consulte [(Opcional) Parte 1: Configurar notificações de eventos de falha de renderização](#send-personalized-email-set-up-notifications).

------

1. Personalize o exemplo anterior de acordo com as suas necessidades e salve o arquivo como *myemail.json*.

1. Na linha de comando, digite o seguinte comando da API v2 para enviar o e-mail:

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

### Enviar e-mails com base em modelo a vários objetos de destino
<a name="send-templated-email-multiple-destinations"></a>

Você pode usar a operação [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 um e-mail a vários objetos de destino em uma única chamada para a API v2 do SES. O SES envia um e-mail exclusivo para os destinatários em cada 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).

**Como enviar um e-mail com base em modelo a vários objetos de destino**

1. Dependendo se você deseja usar um *modelo armazenado* ou um *modelo em linha*, selecione o exemplo de código respectivo para colar em um editor de texto, personalizando-o conforme necessário.

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

   Observe que o modelo que você criou na etapa anterior, *MyTemplate*, está sendo referenciado como o valor do `TemplateName` parâmetro.

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

   Esse código contém as seguintes propriedades:
   + **FromEmailAddress**— O endereço de e-mail do remetente.
   + **DefaultContent**— Um objeto JSON que contém os `TemplateData` objetos `TemplateName` e. 
   + **TemplateName**— O nome do `Template` recurso a ser aplicado ao e-mail.
   + **TemplateData**— Contém pares de valores-chave que serão usados se o `ReplacementEmailContent` objeto contiver um objeto JSON vazio,`{}`, na propriedade. `ReplacementTemplateData`
   + **BulkEmailEntries**— Uma matriz que contém um ou mais `Destination` objetos.
   + **Destino** — Um objeto contendo os destinatários de e-mail definidos nas *BccAddresses*propriedades *ToAddresses*CcAddresses**, e. Elas podem ser usadas em qualquer combinação e podem conter um ou mais endereços de e-mail que receberão o mesmo e-mail.
   + **ReplacementTemplateData**— Uma string JSON com escape que contém pares de valores-chave. As chaves correspondem às variáveis do modelo, por exemplo, `{{name}}`. Os valores representam o conteúdo que substitui as variáveis no e-mail. (Se a string JSON aqui estiver vazia, indicada por `{}`, os pares de chave-valor definidos na propriedade `TemplateData` dentro do objeto `DefaultContent` serão usados.)
   + **ConfigurationSetName**— O nome do conjunto de configurações a ser usado ao enviar o e-mail.
**nota**  
Recomendamos que você use um conjunto de configurações definido para publicar eventos de falha de processamento no Amazon SNS. Para obter mais informações, consulte [(Opcional) Parte 1: Configurar notificações de eventos de falha de renderização](#send-personalized-email-set-up-notifications).

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

   Observe que as propriedades `TemplateContent` (que normalmente seriam definidas em um *modelo armazenado*) estão sendo definidas *em linha*, junto com a propriedade `TemplateData`, o que faz dele um *modelo em linha*.

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

   Esse código contém as seguintes propriedades:
   + **FromEmailAddress**— O endereço de e-mail do remetente.
   + **DefaultContent**— Um objeto JSON que contém os `TemplateData` objetos `TemplateContent` e. 
   + **TemplateContent**— Um contêiner para os seguintes atributos:
     + **Assunto**: a linha de assunto do e-mail. Essa propriedade pode conter tags de substituição. Essas tags usam o seguinte formato: `{{tagname}}`. Quando você envia o e-mail, pode especificar um valor para `tagname` de cada destino.
     + **Html**: o corpo HTML do e-mail. Essa propriedade pode conter tags de substituição. O exemplo anterior inclui duas tags: `{{name}}` e `{{favoriteanimal}}`.
     + **Text**: o corpo de texto do e-mail. Os destinatários cujos clientes de e-mail não exibem conteúdo HTML verão esta versão do e-mail. Essa propriedade também pode conter tags de substituição.
   + **TemplateData**— Contém pares de valores-chave que serão usados se o `ReplacementEmailContent` objeto contiver um objeto JSON vazio,`{}`, na propriedade. `ReplacementTemplateData`
   + **BulkEmailEntries**— Uma matriz que contém um ou mais `Destination` objetos.
   + **Destino** — Um objeto contendo os destinatários de e-mail definidos nas *BccAddresses*propriedades *ToAddresses*CcAddresses**, e. Elas podem ser usadas em qualquer combinação e podem conter um ou mais endereços de e-mail que receberão o mesmo e-mail.
   + **ReplacementTemplateData**— Uma string JSON com escape que contém pares de valores-chave. As chaves correspondem às variáveis definidas nas propriedades `TemplateContent` desse arquivo, por exemplo, `{{name}}`. Os valores representam o conteúdo que substitui as variáveis no e-mail. (Se a string JSON aqui estiver vazia, indicada por `{}`, os pares de chave-valor definidos na propriedade `TemplateData` dentro do objeto `DefaultContent` serão usados.)
   + **ConfigurationSetName**— O nome do conjunto de configurações a ser usado ao enviar o e-mail.
**nota**  
Recomendamos que você use um conjunto de configurações definido para publicar eventos de falha de processamento no Amazon SNS. Para obter mais informações, consulte [(Opcional) Parte 1: Configurar notificações de eventos de falha de renderização](#send-personalized-email-set-up-notifications).

------

1. Altere os valores no código da etapa anterior de acordo com as suas necessidades e salve o arquivo como *mybulkemail.json*.

1. Na linha de comando, digite o seguinte comando da API v2 para enviar o e-mail em massa:

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

# Personalização de e-mail avançada
<a name="send-personalized-email-advanced"></a>

 Se estiver usando um *modelo armazenado*, ou seja, você criou um 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) no Amazon SES usando a operação `CreateEmailTemplate` com a API v2 do SES, poderá aproveitar o sistema Handlebars para criar modelos que incluem recursos avançados, como atributos aninhados, iteração de matriz, instruções condicionais básicas e a criação de parciais em linha. Esta seção fornece exemplos desses recursos.

O Handlebars inclui recursos adicionais além dos documentados nesta seção. Para obter mais informações, consulte [Auxiliares integrados](https://handlebarsjs.com/guide/builtin-helpers.html) em [handlebarsjs.com](http://handlebarsjs.com).

**nota**  
O SES não escapa de conteúdo HTML ao renderizar o modelo HTML para uma mensagem. Isso significa que, se você estiver incluindo dados inseridos pelo usuário, como de um formulário de contato, precisará escapá-los no lado do cliente.

**Topics**
+ [

## Analisar atributos aninhados
](#send-personalized-email-advanced-nested)
+ [

## Percorrer listas
](#send-personalized-email-advanced-iterating)
+ [

## Usar instruções condicionais básicas
](#send-personalized-email-advanced-conditionals)
+ [

## Criação de parciais em linha
](#send-personalized-email-advanced-inline-partials)

## Analisar atributos aninhados
<a name="send-personalized-email-advanced-nested"></a>

O Handlebars inclui suporte para caminhos aninhados, o que torna fácil organizar complexos dados do cliente e, em seguida, consultá-los em seus modelos de e-mail.

Por exemplo, você pode organizar os dados dos destinatários em diversas categorias gerais. Em cada uma dessas categorias, você pode incluir informações detalhadas. O código de exemplo a seguir mostra um exemplo dessa estrutura para um único destinatário:

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

Em seus modelos de e-mail, você pode consultar atributos aninhados ao fornecer o nome do atributo pai, seguido por um ponto (.) e pelo nome do atributo para os quais você deseja incluir o valor. Por exemplo, se você usar a estrutura de dados mostrada no exemplo anterior e desejar incluir o nome de cada destinatário no modelo de e-mail, inclua o seguinte texto em seu modelo de e-mail: `Hello {{contact.firstName}}!`

O Handlebars pode analisar caminhos aninhados em vários níveis de profundidade, o que significa que você tem flexibilidade para escolher como estruturar os dados de seu modelo.

## Percorrer listas
<a name="send-personalized-email-advanced-iterating"></a>

A função auxiliar `each` faz a iteração por meio de itens em uma matriz. O código a seguir é um exemplo de um modelo de e-mail que usa a função auxiliar `each` para criar uma lista detalhada dos interesses de cada destinatário.

```
{
  "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**  
No código de exemplo anterior, os valores dos atributos `HtmlPart` e `TextPart` incluem quebras de linha para facilitar a leitura do exemplo. O arquivo JSON para seu modelo não pode conter quebras de linha dentro desses valores. Se você copiou e colou esse exemplo em seu próprio arquivo JSON, antes de prosseguir, remova as quebras de linha e os espaços extras das seções `HtmlPart` e `TextPart`.

Depois de criar o modelo, você pode usar a operação `SendEmail` ou `SendBulkEmail` para enviar e-mails para destinatários usando esse modelo. Desde que cada destinatário tenha, pelo menos, um valor no objeto `Interests`, eles receberão um e-mail que inclua uma lista detalhada de seus interesses. O exemplo a seguir mostra um arquivo JSON que pode ser usado para enviar e-mails para vários destinatários usando o modelo 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\":[]}"
}
```

Quando você enviar um e-mail para os destinatários listados no exemplo anterior usando a operação `SendBulkEmail`, eles receberão uma mensagem que se parece com o exemplo mostrado na imagem a seguir:

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


## Usar instruções condicionais básicas
<a name="send-personalized-email-advanced-conditionals"></a>

Esta seção se baseia no exemplo descrito na seção anterior. O exemplo na seção anterior usa o auxiliar `each` para fazer a iteração por meio de uma lista de interesses. No entanto, os destinatários para os quais nenhum interesse está especificado recebem um e-mail que contém uma lista vazia. Ao usar o auxiliar `{{if}}`, você poderá formatar o e-mail de forma diferente se um determinado atributo estiver presente nos dados do modelo. O código a seguir usará o auxiliar `{{if}}` para exibir a lista com marcadores na seção anterior se a matriz `Subscription` contiver todos os valores. Se a matriz estiver vazia, outro bloco de texto será exibido.

```
{
  "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**  
No código de exemplo anterior, os valores dos atributos `HtmlPart` e `TextPart` incluem quebras de linha para facilitar a leitura do exemplo. O arquivo JSON para seu modelo não pode conter quebras de linha dentro desses valores. Se você copiou e colou esse exemplo em seu próprio arquivo JSON, antes de prosseguir, remova as quebras de linha e os espaços extras das seções `HtmlPart` e `TextPart`.

O exemplo a seguir mostra um arquivo JSON que pode ser usado para enviar e-mails para vários destinatários usando o modelo 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\":[]}"
}
```

Neste exemplo, o destinatário cujos dados do modelo incluíam uma lista de interesses recebe o mesmo e-mail como o exemplo mostrado na seção anterior. No entanto, o destinatário cujos dados do modelo não incluíam interesses recebe um e-mail que se parece com o exemplo mostrado na imagem a seguir:

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


## Criação de parciais em linha
<a name="send-personalized-email-advanced-inline-partials"></a>

Você pode usar parciais em linha para simplificar os modelos que incluem strings repetidas. Por exemplo, é possível criar um parcial em linha que inclua o nome do destinatário e, se estiver disponível, o sobrenome, adicionando o seguinte código no início de seu modelo:

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

**nota**  
O caractere de nova linha (`\n`) é necessário para separar o bloco `{{inline}}` do conteúdo em seu modelo. A nova linha não é renderizada na saída final.

Depois de criar a parcial `fullName`, você pode incluí-la em qualquer lugar em seu modelo colocando antes do nome da parcial um sinal de maior que (>) seguido por um espaço, como no exemplo a seguir: `{{> fullName}}`. As parciais em linha não são transferidas entre partes do e-mail. Por exemplo, se você desejar usar a parcial em linha no HTML e na versão de texto do e-mail, defina-a nas seções `HtmlPart` e `TextPart`.

Você também pode usar parciais em linha ao fazer a iteração por meio de matrizes. Você pode usar o seguinte código para criar um modelo que use a parcial em linha `fullName`. Neste exemplo, a parcial em linha se aplica ao nome do destinatário e a uma variedade de outros nomes:

```
{
  "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**  
No código de exemplo anterior, os valores dos atributos `HtmlPart` e `TextPart` incluem quebras de linha para facilitar a leitura do exemplo. O arquivo JSON para seu modelo não pode conter quebras de linha dentro desses valores. Se você copiou e colou esse exemplo em seu próprio arquivo JSON, remova as quebras de linha e os espaços extras dessas seções.

# Gerenciamento de modelos de e-mail
<a name="send-personalized-email-manage-templates"></a>

Além de [criar modelos de e-mail](send-personalized-email-api.md), você também pode usar a API v2 do Amazon SES para atualizar ou excluir modelos existentes, listar todos os modelos existentes ou visualizar o conteúdo de um modelo. 

Esta seção contém procedimentos para usar o AWS CLI para realizar tarefas relacionadas aos modelos do SES.

**nota**  
Os procedimentos desta seção também pressupõem que você já instalou e configurou a AWS CLI. Para obter mais informações sobre como instalar e configurar o AWS CLI, consulte o [Guia do AWS Command Line Interface usuário](https://docs.aws.amazon.com/cli/latest/userguide/).

## Visualização de uma lista de modelos de e-mail
<a name="send-personalized-email-manage-templates-list"></a>

Você pode usar a operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_ListEmailTemplate.html) da API v2 do SES para visualizar uma lista de todos os seus modelos de e-mail existentes.

**Para visualizar uma lista de modelos de e-mail**
+ Na linha de comando, insira o seguinte comando:

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

  Se houver modelos de e-mail existentes na sua conta do SES na região atual, esse comando retornará uma resposta semelhante ao seguinte exemplo:

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

  Se você ainda não criou nenhum modelo, o comando retorna um objeto `TemplatesMetadata` sem membros.

## Visualização do conteúdo de um modelo de e-mail específico
<a name="send-personalized-email-manage-templates-get"></a>

Você pode usar a operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html) da API v2 do SES para visualizar o conteúdo de um modelo de e-mail específico.

**Para visualizar o conteúdo de um modelo de e-mail específico**
+ Na linha de comando, insira o seguinte comando:

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

  No comando anterior, *MyTemplate* substitua pelo nome do modelo que você deseja visualizar.

  Se o nome do modelo fornecido corresponder a um modelo que existe na sua conta do SES, esse comando retornará uma resposta semelhante ao seguinte exemplo:

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

  Se o nome do modelo fornecido não corresponder a um modelo existente na sua conta do SES, o comando retornará um erro de `NotFoundException`.

## Exclusão de um modelo de e-mail
<a name="send-personalized-email-manage-templates-delete"></a>

Você pode usar a operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_DeleteEmailTemplate.html) da API v2 do SES para excluir um modelo de e-mail específico.

**Para excluir um modelo de e-mail**
+ Na linha de comando, insira o seguinte comando:

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

  No comando anterior, *MyTemplate* substitua pelo nome do modelo que você deseja excluir.

  Esse comando não fornece nenhuma saída. Você pode verificar se o modelo foi excluído usando a [GetTemplate](#send-personalized-email-manage-templates-get)operação.

## Atualização de um modelo de e-mail
<a name="send-personalized-email-manage-templates-update"></a>

Você pode usar a operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_UpdateEmailTemplate.html) da API v2 do SES para atualizar um modelo de e-mail existente. Por exemplo, essa operação é útil se você quiser alterar a linha de assunto do modelo de email ou se precisar modificar o corpo da mensagem em si.

**Para atualizar um modelo de e-mail**

1. Use o comando `GetEmailTemplate` para recuperar o modelo existente inserindo o seguinte comando na linha de comandos:

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

   No comando anterior, *MyTemplate* substitua pelo nome do modelo que você deseja atualizar.

   Se o nome do modelo fornecido corresponder a um modelo que existe na sua conta do SES, esse comando retornará uma resposta semelhante ao seguinte exemplo:

   ```
   {
       "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. Em um editor de texto, crie um novo arquivo. Cole a saída do comando anterior no arquivo.

1. Modifique o template conforme necessário. Todas as linhas que você omitir são removidas do modelo. Por exemplo, se você quiser alterar apenas o `SubjectPart` do modelo, você ainda precisa incluir as propriedades `TextPart` e `HtmlPart`.

   Ao concluir, salve o arquivo como `update_template.json`.

1. Na linha de comando, insira o seguinte comando:

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

   No comando anterior, *path/to/update\$1template.json* substitua pelo caminho para o `update_template.json` arquivo que você criou na etapa anterior.

   Se o modelo for atualizado com êxito, esse comando não fornece nenhuma saída. Você pode verificar se o modelo foi atualizado usando a operação [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_GetEmailTemplate.html).

   Se o modelo especificado não existir, esse comando retornará um erro de `TemplateDoesNotExist`. Se o modelo não contiver a propriedade `TextPart` nem a propriedade `HtmlPart`, este comando retornará um erro `InvalidParameterValue`. 