ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

Amazon SES Eメールテンプレートのあれこれ

こんにちは、AWSグループの平原です。

皆様は、一品ずつ出してくれるテンプラ屋さんに行ったことがあるでしょうか?
私は最近やっと一品ずつ出てくるテンプラ屋さんに行きました。ファミレスで食べるテンプラとはやはり違いを感じました!

といったところで今回は、Amazon SES のEメールテンプレートを使用したときのあれこれを記事にします。
Eメールテンプレートを利用して定型的なメールの送信を考えている方、既に使用している方の参考になれば幸いです。

はじめに

今回のEメールテンプレートの記事は、保存済みテンプレートを使用したときの内容になります。

保存済みテンプレートの制限

  • テンプレート作成可能最大数: 20,000個(リージョンあたり)
  • 1テンプレートの最大サイズ: 500KB(TextとHTMLの合計)

詳細は下記を参照ください。
docs.aws.amazon.com

Eメールテンプレートの作成

AWS CLIを利用して、Eメールテンプレートを作成します。
また参考程度となりますが、CloudFormationで作成する際のEメールテンプレート作成についても記載します。

AWS CLI で作成する

① Eメールテンプレートの型となるJsonファイルを作成する

{
    "TemplateName": "MyTemplate",
    "TemplateContent": {
        "Subject": "Greetings, {{name}}!",
        "Text": "Dear {{name}},\r\nYour favorite animal is {{favoriteanimal}}.",
        "Html": "<h1>Hello {{name}},</h1><p>Your favorite animal is {{favoriteanimal}}.</p>"
    }
}

 上記の例では、{{name}}{{favoriteanimal}} が変数として定義されており、送信時に値を入力し、メール送信する形となります。

② Eメールテンプレートを作成する
下記のAWS CLI を実行し、Eメールテンプレートを作成します。

aws sesv2 create-email-template \
--cli-input-json file://mytemplate.json \
--region ap-northeast-1

 ※ 特にレスポンスはなし

③ Eメールテンプレートの作成を確認する
下記のAWS CLI を実行し、Eメールテンプレート一覧から作成されたことを確認します。

aws sesv2 list-email-templates \
--region ap-northeast-1

レスポンス

{
    "TemplatesMetadata": [
        {
            "TemplateName": "MyTemplate",
            "CreatedTimestamp": "2025-04-16T14:40:50.796000+09:00"
        }
    ]
}


CloudFormationで作成する

(参考程度に)CloudFormationで作成する際のEメールテンプレート作成についても記載します。

AWSTemplateFormatVersion: "2010-09-09"
Description: SES Email Template

Resources:
  # --------------------------------------------------------------
  # SES Email Template
  # --------------------------------------------------------------
  MyEmailTemplate:
    Type: AWS::SES::Template
    Properties:
      Template:
        TemplateName: "MyTemplate"
        SubjectPart: "Greetings, {{name}}!"
        TextPart: |
          Dear {{name}},\r\n
          Your favorite animal is {{favoriteanimal}}.
        HtmlPart: |
          <h1>Hello {{name}},</h1>
          <p>Your favorite animal is {{favoriteanimal}}.</p>

テンプレートを使用したEメールの送信

AWS CLIを利用して、下記のように送信できます。
(上記で作成した"MyTemplate"の例)

aws ses send-templated-email \
--source <送信先メールアドレス> \
--destination ToAddresses=<宛先メールアドレス> \
--template "MyTemplate" \
--template-data '{ "name": "hirahara", "favoriteanimal": "cat" }' \
--region ap-northeast-1

レスポンス

{
    "MessageId": "01xxxxxxxxxxxxxx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxx00"
}

メール送信時のあれこれ

Eメールテンプレートを利用してメール送信したときに「あれ?これは?」と感じたことがあったので記載します。

実行シチュエーション1: 指定するパラメータが不足している

下記のように指定するパラメータが不足している状態で送信した場合、AWS CLI の実行はエラーとなりません
ただし、メール自体は送信されません
AWS CLIのレスポンスは正常時と同じものが返されます。

aws ses send-templated-email \
--source <送信先メールアドレス> \
--destination ToAddresses=<宛先メールアドレス> \
--template "MyTemplate" \
--template-data '{ "name": "hirahara" }' \
--region ap-northeast-1

 上記では、テンプレートで定義している "favoriteanimal" を指定していません。

レスポンス

{
    "MessageId": "01xxxxxxxxxxxxxx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxx00"
}


補足情報

実際に試せていませんが、メール送信失敗を検知するには、SESのイベント通知設定をする必要があるようです。 repost.aws


実行シチュエーション2: 定義していないパラメータを指定

下記のように定義していないパラメータをキーに指定して送信した場合、AWS CLI の実行はエラーとなりません
ただし、メール自体は送信されません
(メール送信失敗の原因としては、シチュエーション1と同じ)
AWS CLIのレスポンスは正常時と同じものが返されます。

aws ses send-templated-email \
--source <送信先メールアドレス> \
--destination ToAddresses=<宛先メールアドレス> \
--template "MyTemplate" \
--template-data '{ "name": "hirahara", "favoritesports": "Baseball" }' \
--region ap-northeast-1

 上記では、テンプレートで定義していない "favoritesports" を指定しています。

レスポンス

{
    "MessageId": "01xxxxxxxxxxxxxx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxx00"
}


実行シチュエーション3: 定義していないパラメータをプラスで指定

下記のように定義していないパラメータをプラスで指定して送信した場合、AWS CLI の実行はエラーとなりません
また、メール自体は送信されます
※ 定義していないプラスで指定したパラメータは、影響なくメールは送信される
AWS CLIのレスポンスは正常時と同じものが返されます。

aws ses send-templated-email \
--source <送信先メールアドレス> \
--destination ToAddresses=<宛先メールアドレス> \
--template "MyTemplate" \
--template-data '{ "name": "hirahara", "favoriteanimal": "cat", "favoritesports": "Baseball" }' \
--region ap-northeast-1

 上記では、テンプレートで定義していない "favoritesports" をプラスで指定しています。

レスポンス

{
    "MessageId": "01xxxxxxxxxxxxxx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxx00"
}


パターンまとめ

実行シチュエーション 概要 AWS CLI 実行 メール送信
1 指定するパラメータが不足している エラーにならない 送信されない
2 定義していないパラメータを指定 エラーにならない 送信されない
3 定義していないパラメータをプラスで指定 エラーにならない 送信される

さいごに

Amazon SES の Eメールテンプレートを利用して、メール送信すると、効率的にメールを送信することが可能です。
ただ、メール送信する際に少し想像と違う挙動になったので、今回記事にしました。
Eメールテンプレートを利用して定型的なメールの送信を考えている方、既に使用している方の参考になれば幸いです。