Amazon Simple Email Service
開発者ガイド

E メールの高度なパーソナライズ

Amazon SES のテンプレート機能は、Handlebars テンプレートシステムを基盤としています。Handlebars を使用して、入れ子の属性、配列の反復処理、基本的な条件ステートメント、インラインパーシャルの作成などの高度な機能を含むテンプレートを作成することができます。このセクションでは、これらの機能の例を示します。

このセクションに記載されている機能の他にも、Handlebars にはさまざまな機能を提供します。詳細については、handlebarsjs.com の「Built-In Helpers」を参照してください。

入れ子の属性の解析

Handlebars には入れ子パスのサポートが含まれています。入れ子パスを使うことで、複雑な顧客データを簡単に整理し、E メールテンプレート内でそのデータを参照できるようになります。

たとえば、受信者のデータをいくつかの一般的なカテゴリで整理し、各カテゴリに詳細な情報を含めることができます。以下のコード例は、このような構造を 1 人の受信者で実現しています。

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

E メールテンプレートで入れ子の属性を参照するには、親属性の名前、ピリオド (.)、値を含める属性の名前の順に指定します。たとえば前述の例で示したデータ構造を使用し、それぞれの受信者のファーストネームを E メールテンプレートに含める場合は、次のテキストを E メールテンプレートに含めます。Hello {{Contact.FirstName}}!

Handlebars は、複数の階層にわたって入れ子になったパスを解析できます。つまり、テンプレートのデータ構造を柔軟に設定することができます。

リストに対する反復処理

each ヘルパー関数は、配列内の項目を反復処理します。以下のコード例の E メールテンプレートでは、each ヘルパー関数を使用して、それぞれの受信者の関心を項目別に記載したリストを作成しています。

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

重要

上記のコード例の HtmlPart および TextPart 属性には、読みやすくするための改行が含まれています。テンプレートの JSON ファイルでは、これらの値に改行を含めることはできません。この例を独自の JSON ファイルにコピーして貼り付ける場合は、HtmlPart および TextPart セクションの改行と不要なスペースを削除してから次に進んでください。

テンプレートを作成したら、SendTemplatedEmail または SendBulkTemplatedEmail オペレーションを使用し、このテンプレートを使って受信者に E メールを送信します。Interests オブジェクトに値が少なくとも 1 つあれば、それぞれの受信者は、項目別の関心リストを含む E メールを受信します。以下の例は、上記のテンプレートを使用した複数の受信者への E メール送信に使用できる JSON ファイルを示しています。

{ "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\":[]}" }

上記の例でリストされた受信者に SendBulkTemplatedEmail オペレーションを使用して E メールを送信すると、受信者には以下の画像のようなメッセージが届きます。

基本的な条件ステートメントの使用

このセクションの内容は、前のセクションで説明した例に基づいています。前のセクションの例では、each ヘルパーを使用して関心のリストを反復処理しています。ただし、関心が指定されていない受信者には、空白のリストが記載された E メールが届くことになります。{{if}} ヘルパーを使用すると、テンプレート内のデータに特定の属性が存在する場合に、E メールに異なるフォーマットを適用することができます。以下のコードでは、{{if}} ヘルパーを使用して、Subscription 配列に何らかの値が含まれている場合に、前のセクションの箇条書きリストを表示しています。配列が空の場合、別のテキストブロックが表示されます。

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

重要

上記のコード例の HtmlPart および TextPart 属性には、読みやすくするための改行が含まれています。テンプレートの JSON ファイルでは、これらの値に改行を含めることはできません。この例を独自の JSON ファイルにコピーして貼り付ける場合は、HtmlPart および TextPart セクションの改行と不要なスペースを削除してから次に進んでください。

以下の例は、上記のテンプレートを使用した複数の受信者への E メール送信に使用できる JSON ファイルを示しています。

{ "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\":[]}" }

この例の場合、テンプレートのデータに関心リストが含まれている受信者は、前のセクションで示した例と同じ E メールを受け取ります。一方、テンプレートデータに関心が含まれていない受信者には、以下の画像のような E メールが届きます。

インラインパーシャルの作成

インラインパーシャルを使用して、文字列の繰り返しを含むテンプレートを簡素化することができます。たとえば、テンプレートの先頭に以下のコードを追加することで、受信者のファーストネームと (存在する場合は) ラストネームを含むインラインパーシャルを作成できます。

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

注記

テンプレートの内容と {{inline}} ブロックを分離するためには、改行文字 (\n) が必要です。最終的な出力には改行は表示されません。

fullName パーシャルを作成したら、以下の例のように、大なり記号 (>)、スペース、パーシャルの名前を指定することで ({{> fullName}})、このパーシャルをテンプレートの任意の場所に含めることができます。インラインパーシャルは、メールの特定部分をまたがって適用されません。たとえば E メールの HTML バージョンとテキストバージョンに同じインラインパーシャルを使用する場合、HtmlPart および TextPart セクションの両方に、このインラインパーシャルを定義する必要があります。

インラインパーシャルを配列を反復処理する際に使用することもできます。以下のコードを使用して、fullName インラインパーシャルを使用するテンプレートを作成できます。この例では、受信者の名前とその他の名前の配列の両方に、インラインパーシャルが適用されています。

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

重要

上記のコード例の HtmlPart および TextPart 属性には、読みやすくするための改行が含まれています。テンプレートの JSON ファイルでは、これらの値に改行を含めることはできません。この例を独自の JSON ファイルにコピーして貼り付ける場合は、これらのセクションの改行と不要なスペースを削除してください。