

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# E メールの高度なパーソナライズ
<a name="send-personalized-email-advanced"></a>

 *保存済みテンプレート*を使用している場合、つまり SES v2 API で `CreateEmailTemplate` オペレーションを使用して Amazon SES で [https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_Template.html) リソースを作成した場合、Handlebars システムを活用して、ネストされた属性、配列のイテレーション、基本的な条件ステートメント、インライン部分の作成などの高度な機能を含むテンプレートを作成できます。このセクションでは、これらの機能の例を示します。

このセクションに記載されている機能の他にも、Handlebars にはさまざまな機能を提供します。詳細については、[handlebarsjs.com](https://handlebarsjs.com/guide/builtin-helpers.html) の「[Built-In Helpers](http://handlebarsjs.com)」を参照してください。

**注記**  
SES は、メッセージの HTML テンプレートをレンダリングするときに HTML コンテンツをエスケープしません。つまり、コンタクトフォームなどのユーザー入力データを含める場合は、クライアント側でエスケープする必要があります。

**Topics**
+ [入れ子の属性の解析](#send-personalized-email-advanced-nested)
+ [リストに対する反復処理](#send-personalized-email-advanced-iterating)
+ [基本的な条件ステートメントの使用](#send-personalized-email-advanced-conditionals)
+ [インラインパーシャルの作成](#send-personalized-email-advanced-inline-partials)

## 入れ子の属性の解析
<a name="send-personalized-email-advanced-nested"></a>

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

## リストに対する反復処理
<a name="send-personalized-email-advanced-iterating"></a>

`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`セクションの改行と不要なスペースを削除してから次に進んでください。

テンプレートを作成したら、`SendEmail`または`SendBulkEmail`オペレーションを使用し、このテンプレートを使って受信者に 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\":[]}"
}
```

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

![選択した興味としてスポーツ、旅行、クックを一覧表示する通知を設定します。](http://docs.aws.amazon.com/ja_jp/ses/latest/dg/images/send-personalized-email-advanced-condition-interest.png)


## 基本的な条件ステートメントの使用
<a name="send-personalized-email-advanced-conditionals"></a>

このセクションの内容は、前のセクションで説明した例に基づいています。前のセクションの例では、`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 メールが届きます。

![ヘッダー「ユーザー設定」とサブスクリプション設定の更新に関するテキストを含む E メールメッセージ。](http://docs.aws.amazon.com/ja_jp/ses/latest/dg/images/send-personalized-email-advanced-condition-nointerest.png)


## インラインパーシャルの作成
<a name="send-personalized-email-advanced-inline-partials"></a>

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

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

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

`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 ファイルにコピーして貼り付ける場合は、これらのセクションの改行と不要なスペースを削除してください。