Amazon SESでテンプレートでパーソナライズしたメールが送信可能になりました
ウィスキー、シガー、パイプをこよなく愛する大栗です。
本日Amazon SESでテンプレートを利用してパーソナライズしたメールを送信できるようになりました。マーケティングメールで良くある本文の名前などを置き換えて送信する機能です。早速試してみました。
- Amazon SES Introduces Email Templates for Sending Personalized Email
- Release: Amazon Simple Email Service on 2017-10-11
テンプレートを使用したパーソナライズ
ドキュメントを参照するとaws ses create-template
コマンドのヘルプを参照するとテンプレートのフォーマットは以下のようになっています。
{ "TemplateName": "string", "SubjectPart": "string", "TextPart": "string", "HtmlPart": "string" }
各項目の内容は以下のとおりです。
項目 | 内容 |
---|---|
TemplateName | テンプレートの名称。メール送信時にこの名前を参照します。 |
SubjectPart | メールの件名。置換タグを含めることができます。タグには{{tagname}}形式を使用します。メール送信時に宛先ごとにタグの値を指定できます。 |
HtmlPart | メールのHTML本文。置換タグを含めることができます。 |
TextPart | メールのテキスト本文。HTMLメールを表示できないメールクライアントの場合に参照します。 |
件名と本文にタグを埋め込むことで宛先ごとにパーソナライズできます。
制限
- Amazon SESアカウントごとに最大10,000のメールテンプレートを作成できます。
- 各テンプレートは、テキスト部分とHTML部分の合計で最大500KBにすることができます。
- 各テンプレートには、置換タグを無制限に含められます。
- SendBulkTemplatedEmailの呼出しで50宛先までメールを送信できます。宛先にはCCとBCCが含まれます。APIへの一回の呼び出しで連絡できる接続先の数は、アカウントの最大送信レートによって制限される場合があります。詳細についてはManaging Your Amazon SES Sending Limitsを参照してください。
試してみる
以下の流れで試してみます。なお、SESはオレゴンリージョン(us-west-2)で実行します。
- メール送信設定
- テンプレートの作成
- プレビューの確認
- メール送信
現在テンプレート機能はコンソールから実行できない(テンプレートの一覧表示は可能)ためCLIで行います。AWS CLIを最新のバージョンにしておきましょう。
メール送信設定
事前準備として、オレゴンリージョンでメールを送信できるSESの環境を構築します。具体的な手順は、以下のエントリーをご覧ください。
テンプレートの作成
テンプレートの内容として以下のようにテンプレートのファイルを作成します。
{ "Template": { "TemplateName": "TestTemplate01", "SubjectPart": "こんにちは {{name}}!", "HtmlPart": "<h1>こんにちは {{name}}さん</h1><p>あなたの好きなAWSサービスは{{favoriteservice}}ですね。</p>", "TextPart": "前略 {{name}}さん\r\nあなたの好きなAWSサービスは{{favoriteservice}}ですね。\r\n草々" } }
テンプレートはaws ses create-template
コマンドで登録します。
aws ses create-template --cli-input-json file://TestMainTemplate.json --region us-west-2
コンソールでもテンプレートの名前と作成時刻が表示されます。
プレビューの確認
タグを置換した結果の確認をしてみます。プレビューの表示にはaws ses test-render-template
コマンドを使用します。
aws ses test-render-template --template-name TestTemplate01 --template-data '{ "name": "大栗" , "favoriteservice": "SES" }' --region us-west-2 { "RenderedTemplate": "Date: 2017-10-12T01:59:37.325Z\r\nMessage-ID: <1234567890.123.1234567890123.JavaMail.ec2-user@ip-192-0-2-57.us-west-2.compute.internal>\r\nSubject: =?UTF-8?B?44GT44KT44Gr44Gh44GvIOWkp+aglyE=?=\r\nMIME-Version: 1.0\r\nContent-Type: multipart/alternative; \r\n\tboundary=\"----=_Part_123_1234567890.1234567890123\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n------=_Part_123_1234567890.1234567890123\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\n\r\n5YmN55WlIOWkp+agl+OBleOCkw0K44GC44Gq44Gf44Gu5aW944GN44GqQVdT44K144O844OT44K5\r\n44GvU0VT44Gn44GZ44Gt44CCDQrojYnjgIU=\r\n------=_Part_123_1234567890.1234567890123\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\n\r\nPGgxPuOBk+OCk+OBq+OBoeOBryDlpKfmoJfjgZXjgpM8L2gxPjxwPuOBguOBquOBn+OBruWlveOB\r\njeOBqkFXU+OCteODvOODk+OCueOBr1NFU+OBp+OBmeOBreOAgjwvcD4=\r\n------=_Part_123_1234567890.1234567890123--\r\n" }
分かりにくいので、データだけを取り出します。
aws ses test-render-template --template-name TestTemplate01 --template-data '{ "name": "大栗" , "favoriteservice": "SES" }' --region us-west-2 | jq '.RenderedTemplate' -r { "RenderedTemplate": "Date: 2017-10-12T01:59:37.325Z\r\nMessage-ID: <1234567890.123.1234567890123.JavaMail.ec2-user@ip-192-0-2-57.us-west-2.compute.internal>\r\nSubject: =?UTF-8?B?44GT44KT44Gr44Gh44GvIOWkp+aglyE=?=\r\nMIME-Version: 1.0\r\nContent-Type: multipart/alternative; \r\n\tboundary=\"----=_Part_123_1234567890.1234567890123\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n------=_Part_123_1234567890.1234567890123\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\n\r\n5YmN55WlIOWkp+agl+OBleOCkw0K44GC44Gq44Gf44Gu5aW944GN44GqQVdT44K144O844OT44K5\r\n44GvU0VT44Gn44GZ44Gt44CCDQrojYnjgIU=\r\n------=_Part_123_1234567890.1234567890123\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding: base64\r\n\r\nPGgxPuOBk+OCk+OBq+OBoeOBryDlpKfmoJfjgZXjgpM8L2gxPjxwPuOBguOBquOBn+OBruWlveOB\r\njeOBqkFXU+OCteODvOODk+OCueOBr1NFU+OBp+OBmeOBreOAgjwvcD4=\r\n------=_Part_123_1234567890.1234567890123--\r\n" } Date: 2017-10-12T01:59:37.325Z Message-ID: <1234567890.123.1234567890123.JavaMail.ec2-user@ip-192-0-2-57.us-west-2.compute.internal> Subject: =?UTF-8?B?44GT44KT44Gr44Gh44GvIOWkp+aglyE=?= MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_123_1234567890.1234567890123" Content-Transfer-Encoding: quoted-printable ------=_Part_123_1234567890.1234567890123 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 5YmN55WlIOWkp+agl+OBleOCkw0K44GC44Gq44Gf44Gu5aW944GN44GqQVdT44K144O844OT44K5 44GvU0VT44Gn44GZ44Gt44CCDQrojYnjgIU= ------=_Part_123_1234567890.1234567890123 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGgxPuOBk+OCk+OBq+OBoeOBryDlpKfmoJfjgZXjgpM8L2gxPjxwPuOBguOBquOBn+OBruWlveOB jeOBqkFXU+OCteODvOODk+OCueOBr1NFU+OBp+OBmeOBreOAgjwvcD4= ------=_Part_123_1234567890.1234567890123--
文面がBASE64エンコーディングされているので復号化してみてみます。ちゃんとレンダリングされていることが分かります。
$ echo '44GT44KT44Gr44Gh44GvIOWkp+aglyE=' | base64 -D こんにちは 大栗!
echo '5YmN55WlIOWkp+agl+OBleOCkw0K44GC44Gq44Gf44Gu5aW944GN44GqQVdT44K144O844OT44K5 > 44GvU0VT44Gn44GZ44Gt44CCDQrojYnjgIU=' | base64 -D 前略 大栗さん あなたの好きなAWSサービスはSESですね。 草々
echo 'PGgxPuOBk+OCk+OBq+OBoeOBryDlpKfmoJfjgZXjgpM8L2gxPjxwPuOBguOBquOBn+OBruWlveOB > jeOBqkFXU+OCteODvOODk+OCueOBr1NFU+OBp+OBmeOBreOAgjwvcD4=' | base64 -D <h1>こんにちは 大栗さん</h1><p>あなたの好きなAWSサービスはSESですね。</p>
メール送信
実際にメールを送信してみます。テンプレートを利用したメールの送信はaws ses send-templated-email
とaws ses send-bulk-templated-email
のコマンドがあります。aws ses send-templated-email
は1通でaws ses send-bulk-templated-email
は複数メールをまとめて送信します。
今回はaws ses send-bulk-templated-email
は複数メールを送信してみます。
以下のようにコマンドの入力内容を以下のようにファイルで作成します。送信先は3箇所としています。注目すべきは3番目のmaroon1st@example.com
の送信設定ではReplacementTemplateData
を空にしています。この場合はDefaultTemplateData
の内容でタグを置換します。なお、ConfigurationSetName
を指定できるので開封やクリックのトラッキングも可能と思われます。
{ "Source":"maroon1st+from@example.com", "Template":"TestTemplate01", "Destinations":[ { "Destination":{ "ToAddresses":[ "maroon1st+send1@example.com" ] }, "ReplacementTemplateData":"{ \"name\":\"大栗\", \"favoriteservice\":\"SES\" }" }, { "Destination":{ "ToAddresses":[ "maroon1st+send2@example.com" ] }, "ReplacementTemplateData":"{ \"name\":\"宗\", \"favoriteservice\":\"RDS\" }" }, { "Destination":{ "ToAddresses":[ "maroon1st@example.com" ] }, "ReplacementTemplateData":"{}" } ], "DefaultTemplateData":"{ \"name\":\"Oguri\", \"favoriteservice\":\"EC2\" }" }
作成した入力内容のファイルを使用して、以下のコマンドでメールを送信します。
$ aws ses send-bulk-templated-email --cli-input-json file://BulkMailData.json --region us-west-2 { "Status": [ { "Status": "Success", "MessageId": "01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000" }, { "Status": "Success", "MessageId": "01234567a8b9c0d2-1234abcd-34ab-ab12-1234-1234abcd12ab-000000" }, { "Status": "Success", "MessageId": "01234567a8b9c0d3-1234abcd-56ab-ab12-1234-1234abcd12ab-000000" } ] }
受信したメールを確認します。Gmailで受信しているのでHTMLの内容が表示されます。
メールのソースを確認すると、以下のようになっています。プレビュー通りContent-Typeはmultipart/alternative
になっており、text/plain
とtext/html
の本文が入っています。
Delivered-To: maroon1st+send1@example.com Received: by 192.0.2.15 with SMTP id z151a2b3c4dff; Wed, 11 Oct 2017 19:43:10 -0700 (PDT) X-Google-Smtp-Source: AOwi7QB/ADA90abcd2uK8aSLbWvolv4bmAn121a2b3c4dV5AMFF31244yELFabcdfQHl7orlhivx X-Received: by 192.0.2.15 with SMTP id g167mr123470pgc.341.1507776190764; Wed, 11 Oct 2017 19:43:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507776190; cv=none; d=google.com; s=arc-20160816; b=Dhbm+wnsbWkeZ1jXJO6+ep1CbQQh/IeN+hVn8oIUyTykUQ87zVzE8VbRmnmem0YZL1 VEbMPwnhA7mZwP248NZfwvE/mCdFD5eEpJSj2O1a2b3c4dTe1jnCvOggHIS8YuhdtOHp +67H+UZwYINSaDeCtE11a2b3c4dPM46YaZVwETpEPlbPGsHncpM59hlluZMdPnNRQuAp WKqtmLY7AfU94VIslP/K1GWdk1BiS4cRy1a2b3c4dFoaPNOCUti4yc7GBGJcRlcjKp5l H1QcLPyvYFmzZg1a2b3c4d3L1fhPsADiKzPYOvisJbTxT4Q7soEwE/TG5w3aRT02bHTt 572w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20161234; h=feedback-id:content-transfer-encoding:mime-version:subject :message-id:to:reply-to:from:date:dkim-signature :arc-authentication-results; bh=SJvVrS8QXgJOHXNu1HRsCUb62Vd6ALOQSFOy8zP3SkM=; b=I8XD3r6lTry1a2b3c4dZiC8eBSiEJrc2fOfJTQh7y1ajOx+P+LwqNJGNWrvNZNwr3D esH7mSQfqRYYMT8swaG01a2b3c4dpjqpE5VAEgLl7hyRIeADVv6oGi+8xRbIjN6umD9X 1a2b3c4dbnzMTIFdUvd0JiJ85TCi1a2b3c4dUtXvwGlRWsr0HdmbszCZzwlG6+y9RxeN aGHa5+Fu1a2b3c4dZJxIoDbiqNZD4gSTjmkO1a2b3c4d7dbT4elspYmwpzT/0ag6fYBC lwxxP/Etj1sBlrC31a2b3c4d/Jb3kzZJV76AECdKiFDi1a2b3c4dvCAnh3m8lLFTTpln 4W3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazonses.com header.s=hsbnp1a2b3c4da2b31a2b3c4dodymuwv header.b=UPwbNlzv; spf=pass (google.com: domain of 01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000@us-west-2.amazonses.com designates 203.0.113.52 as permitted sender) smtp.mailfrom=01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000@us-west-2.amazonses.com Return-Path: <01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000@us-west-2.amazonses.com> Received: from a27-52.smtp-out.us-west-2.amazonses.com (a27-52.smtp-out.us-west-2.amazonses.com. [203.0.113.52]) by mx.google.com with ESMTPS id m2s1a2b3c4dplk.258.2017.10.11.19.43.10 for <maroon1st+send1@example.com> (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 11 Oct 2017 19:43:10 -0700 (PDT) Received-SPF: pass (google.com: domain of 01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000@us-west-2.amazonses.com designates 203.0.113.52 as permitted sender) client-ip=203.0.113.52; Authentication-Results: mx.google.com; dkim=pass header.i=@amazonses.com header.s=hsb1a2b3c4daochz1a2b3c4deodymuwv header.b=UPwbNlzv; spf=pass (google.com: domain of 01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000@us-west-2.amazonses.com designates 203.0.113.52 as permitted sender) smtp.mailfrom=01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000@us-west-2.amazonses.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=hsbnp7p3en1a2b3c4dq5w1a2b3c4duwv; d=amazonses.com; t=1507776190; h=Date:From:Reply-To:To:Message-ID:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Feedback-ID; bh=SJvVrS1a2b3c4dNu1HRsCUb61a2b3c4dSFOy8zP3SkM=; b=UPwbNl1a2b3c4dADNGisPb1a2b3c4d9ngNUHgzG1a2b3c4dptR9qnjg6eKvMwfjI ++Ygve/E0y1a2b3c4dfRXp9ed1a2b3c4dMg9V1omb1a2b3c4d7gdh91a2b3c4d7AJRY 04aaO6W1a2b3c4d122ZyO011a2b3c4dgC5mLTH5o= Date: Thu, 12 Oct 2017 02:43:09 +0000 From: maroon1st+from@example.com Reply-To: maroon1st+from@example.com To: maroon1st+send1@example.com Message-ID: <01234567a8b9c0d1-1234abcd-12ab-ab12-1234-1234abcd12ab-000000@us-west-2.amazonses.com> Subject: =?UTF-8?B?44GT44KT44Gr44Gh44GvIOWkp+aglyE=?= MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_123_1234567890.1234567890123" Content-Transfer-Encoding: quoted-printable X-SES-Outgoing: 2017.10.12-203.0.113.52 Feedback-ID: 1.us-west-2.ACmPL/Uy2r0OLSDgS4Fh2pzm81xWJ5SVOMhWloCoM3g=:AmazonSES ------=_Part_123_1234567890.1234567890123 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 5YmN55WlIOWkp+agl+OBleOCkw0K44GC44Gq44Gf44Gu5aW944GN44GqQVdT44K144O844OT44K5 44GvU0VT44Gn44GZ44Gt44CCDQrojYnjgIU= ------=_Part_123_1234567890.1234567890123 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGgxPuOBk+OCk+OBq+OBoeOBryDlpKfmoJfjgZXjgpM8L2gxPjxwPuOBguOBquOBn+OBruWlveOB jeOBqkFXU+OCteODvOODk+OCueOBr1NFU+OBp+OBmeOBreOAgjwvcD4= ------=_Part_123_1234567890.1234567890123--
さいごに
最近SESのアップデートが活発です。Eメールはレガシーなサービスと思われていますが、現役で様々な場面で使用されているものです。テンプレートによるパーソナライズはメールサービスの専門ベンダーではサポートされているような機能ですが、SESでも可能となりました。今まで外部のメールサービスを使用していてAWSとの連携に苦労している場合などAmazon SESを積極的に活用したようが良い場面が増えてきたと思います。