Amazon Simple Email Service
Guía del desarrollador

Personalización avanzada del correo electrónico

La característica de plantillas de Amazon SES se basa en el sistema de plantillas de Handlebars. Puede utilizar 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 funciones parciales insertadas. 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 en handlebarsjs.com.

Análisis de atributos anidados

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

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 SendTemplatedEmail o SendBulkTemplatedEmail 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 SendBulkTemplatedEmail, recibirán un mensaje similar al ejemplo que se muestra en la siguiente imagen:

Uso de instrucciones condicionales básicas

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:

Creación de funciones parciales insertadas

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 añadiendo 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.