

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 進階電子郵件個人化
<a name="send-personalized-email-advanced"></a>

 如果您使用的是*預存範本*，也就是說，您已使用 `CreateEmailTemplate`操作搭配 SES v2 API 在 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) (內建協助程式)。

**注意**  
呈現訊息的 HTML 範本時，SES 不會逸出 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 支援巢狀路徑，可讓您輕鬆地組織複雜的客戶資料，然後在您的電子郵件範本中引用該資料。

例如，您可以將收件人資料組織為數個一般類別。在每個類別中，您可以加入詳細的資訊。以下程式碼範例顯示用於單一收件人時此結構的範例：

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

在您的電子郵件範本中，可在父屬性名稱後方加入句點 (.)、再加上您想要加入的值的屬性名稱，即可引用參閱巢狀屬性。例如，如果您使用上述範例中顯示的資料結構，而您想要將每個收件人的名字加入到電子郵件範本中，請將下列文字加入至您的電子郵件範本：`Hello {{contact.firstName}}!`

Handlebars 可解析深入數層的路徑，表示您有彈性可選擇要如何架構範本資料。

## 逐一查看清單
<a name="send-personalized-email-advanced-iterating"></a>

`each` 協助程式函數可逐一查看陣列中的項目。以下程式碼為電子郵件範本的範例，使用 `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` 操作來使用此範本傳送電子郵件給收件人。只要每個收件人至少有一個 `Interests` 物件中的值，他們就會收到一封電子郵件，其中包含其興趣的分項清單。以下範例顯示 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` 操作來傳送電子郵件給前述範例所列之收件人時，他們會收到類似於以下影像顯示範例的訊息：

![偏好設定通知，將運動、旅遊和烹調列為選取的興趣。](http://docs.aws.amazon.com/zh_tw/ses/latest/dg/images/send-personalized-email-advanced-condition-interest.png)


## 使用基本條件陳述式
<a name="send-personalized-email-advanced-conditionals"></a>

此節根據上節所述的範例為基礎來進行建構。上述的範例使用 `each` 協助程式來逐一查看興趣清單。不過，未指定興趣的收件人則會收到其中包含空白清單的電子郵件。使用 `{{if}}` 協助程式，若特定屬性出現在範本資料中，您可以以不同方式來格式化電子郵件。若 `{{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` 部分中的換行與多餘空格再繼續。

以下範例顯示 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\":[]}"
}
```

在這個範例中，收件人的範本資料若包含興趣清單，則會收到與前述章節中所顯示的範例相同的電子郵件。但若是範本資料中未包含任何興趣的收件人，則會收到類似於下方影像中顯示範本的電子郵件：

![標題為「您的偏好設定」的電子郵件訊息，以及有關更新訂閱偏好設定的文字。](http://docs.aws.amazon.com/zh_tw/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}}`。內嵌部分不會在電子郵件的不同部分之間傳輸。例如，若您想要在電子郵件的 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 檔案，請先移除這些部分中的換行與多餘空格再繼續。