고급 이메일 맞춤 설정 - Amazon Simple Email Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

고급 이메일 맞춤 설정

Amazon의 템플릿 기능은 핸들바 템플릿 시스템을 SES 기반으로 합니다. Handlebars를 사용하여 중첩 속성, 어레이 반복, 기본 조건문 및 인라인 부분과 같은 고급 기능이 포함되는 템플릿을 생성할 수 있습니다. 이 단원에서는 이러한 기능의 예를 제공합니다.

Handlebars에는 이 섹션에 설명되어 있는 기능 외의 추가 기능이 포함됩니다. 자세한 내용은 handlebarsjs.com에서 Built-In Helpers를 참조하세요.

참고

SES 는 메시지 템플릿을 렌더링할 때 HTML 콘텐츠를 이스케HTML이프하지 않습니다. 즉, 연락처 양식과 같이 사용자 입력 데이터를 포함하는 경우 클라이언트 측에서 이스케이프해야 합니다.

중첩 속성 분석

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는 여러 수준 깊이로 중첩된 경로를 구문 분석할 수 있기 때문에 유연하게 템플릿 데이터를 구성할 수 있습니다.

목록 살펴보기

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}}" } }
중요

앞의 코드 예에는 예를 이해하기 쉽도록 HtmlPartTextPart 속성의 값에 줄 바꿈이 포함되어 있습니다. 템플릿의 JSON 파일에는 이러한 값 내에 줄 바꿈이 포함될 수 없습니다. 이 예제를 복사하여 자체 JSON 파일에 붙여넣은 경우 진행하기 전에 HtmlPartTextPart 섹션에서 줄 바꿈과 추가 공백을 제거합니다.

템플릿을 생성한 후 SendTemplatedEmail 또는 SendBulkTemplatedEmail 작업을 사용하여 수신자에게 이 템플릿으로 이메일을 보낼 수 있습니다. 각 수신자가 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\":[]}" }

SendBulkTemplatedEmail 작업을 사용하여 앞의 예에 나열된 수신자에게 이메일을 보내면 다음 이미지에 표시된 예와 같은 메시지를 수신합니다.

Preferences notification listing Sports, Travel, and Cooking as selected interests.

기본 조건문 사용

이 단원은 이전 단원에서 설명한 예를 기반으로 합니다. 이전 단원의 예는 each 보조 도구를 사용하여 관심사 목록을 살펴봅니다. 하지만 관심사가 지정되지 않은 수신자는 빈 목록이 포함된 이메일을 수신합니다. {{if}} 보조 도구를 사용하면 특정 속성이 템플릿 데이터에 있는 경우 이메일의 형식을 다르게 할 수 있습니다. 다음 코드는 Subscription 어레이에 값이 포함되는 경우 {{if}} 보조 도구를 사용하여 앞 단원의 글머리표 목록을 표시합니다. 어레이가 비어 있으면 다른 텍스트 블록이 표시됩니다.

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

앞의 코드 예에는 예를 이해하기 쉽도록 HtmlPartTextPart 속성의 값에 줄 바꿈이 포함되어 있습니다. 템플릿의 JSON 파일에는 이러한 값 내에 줄 바꿈이 포함될 수 없습니다. 이 예제를 복사하여 자체 JSON 파일에 붙여넣은 경우 진행하기 전에 HtmlPartTextPart 섹션에서 줄 바꿈과 추가 공백을 제거합니다.

다음 예제에서는 이전 템플릿을 사용하여 여러 수신자에게 이메일을 보내는 데 사용할 수 있는 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\":[]}" }

이 예에서는 템플릿 데이터에 관심사 목록이 포함된 수신자가 이전 섹션에 표시된 예와 같은 이메일을 수신합니다. 하지만 템플릿 데이터에 관심사가 포함되지 않은 수신자는 다음 이미지에 표시된 예와 같은 이메일을 수신합니다.

Email message with header "Your Preferences" and text about updating subscription preferences.

인라인 부분 생성

인라인 부분을 사용하여 반복된 문자열이 포함된 템플릿을 간소화할 수 있습니다. 예를 들어 사용 가능한 경우 템플릿의 첫 부분에 다음 코드를 추가하여 수신자의 이름 및 사용 가능한 경우 성이 포함된 인라인 부분을 만들 수 있습니다.

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

줄바꿈 문서(\n)는 템플릿의 콘텐츠에서 {{inline}} 블록을 분리하는 데 필요합니다. 줄바꿈은 최종 출력에 렌더링되지 않습니다.

fullName 부분을 생성한 후 {{> fullName}}의 예와 같이 부분의 이름 앞에 이상(>) 기호를 표시하고 공백을 표시하여 템플릿의 어느 부분에든 포함할 수 있습니다. 인라인 부분은 이메일 부분 사이에 전송되지 않습니다. 예를 들어 및 이메일의 HTML 텍스트 버전 모두에서 동일한 인라인 부분음을 사용하려면 HtmlPartTextPart 섹션에서 모두 정의해야 합니다.

어레이를 통해 살펴보는 경우 인라인 부분을 사용할 수도 있습니다. 다음 코드를 사용하여 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}}" } }
중요

앞의 코드 예에는 예를 이해하기 쉽도록 HtmlPartTextPart 속성의 값에 줄 바꿈이 포함되어 있습니다. 템플릿의 JSON 파일에는 이러한 값 내에 줄 바꿈이 포함될 수 없습니다. 이 예제를 복사하여 자체 JSON 파일에 붙여넣은 경우 이 섹션에서 줄 바꿈과 추가 공백을 제거합니다.