

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á.

# 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 [Built-InAjudantes em [handlebarsjs.com](http://handlebarsjs.com)](https://handlebarsjs.com/guide/builtin-helpers.html).

**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:

![Notificação de preferências listando esportes, viagens e culinária como interesses selecionados.](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:

![Mensagem de e-mail com o cabeçalho “Suas preferências” e texto sobre a atualização das preferências de assinatura.](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.