[アップデート] Amazon SES API v2 で RAW 以外の送信方法でもカスタムヘッダーがサポートされました

2024.03.06

いわさです。

Amazon SES を使うと、外部へメールを送信することが出来ます。
また、Amazon SES では複数のメール送信方法が提供されており、ユースケースにあわせて使い分けることが出来ます。

初めて利用する際は「どれ使ったら良いのだろう」となりがちなので、1 年近く前に次のような形で情報をまとめたことがあります。

本日 Amazon SES の API が密かにアップデートされていたようで、上記の選定基準で少し変わる部分が出てきそうなので新機能を紹介したいと思います。

AWS CLI v1.32.56 から RAW を使わずともカスタムヘッダーが使えるように

大きくは、メール送信に必要な情報あるいはテンプレートを指定してメール送信を行うシンプルな送信と、メールの RAW データ(MIME 形式の電子メール メッセージ)を丸っと渡して送信する方法の 2 つがあります。

上記のまとめ記事にも記載させて頂いていたのですが、シンプル送信で対応出来ない範囲については RAW 送信を使う形になります。
例えば、独自のカスタムヘッダーを付与して送信したい場合などはこれまでは RAW 送信を使う必要がありました。

今朝の AWS CLI v1.32.56 のアップデートで、カスタムヘッダーを追加するオプションが追加されました。

Adds support for providing custom headers within SendEmail and SendBulkEmail for SESv2.

確認してみると次の 2 つの API でコンテンツにヘッダーも追加出来るようになっています。

:
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "",
                "Charset": ""
            },
            "Body": {
                "Text": {
                    "Data": "",
                    "Charset": ""
                },
                "Html": {
                    "Data": "",
                    "Charset": ""
                }
            },
            "Headers": [
                {
                    "Name": "",
                    "Value": ""
                }
            ]
        },
        "Raw": {
            "Data": null
        },
        "Template": {
            "TemplateName": "",
            "TemplateArn": "",
            "TemplateData": "",
            "Headers": [
                {
                    "Name": "",
                    "Value": ""
                }
            ]
        }
    },
:

試してみた

上記を使ってシンプルメール送信時にカスタムヘッダーを付与してみます。
やることはカスタムヘッダーを指定して送るだけです。それだけ!!

% cat hoge.json
{
    "FromEmailAddress": "hoge0306@mail1.tak1wa.com",
    "Destination": {
        "ToAddresses": [
            "hogehoge@example.com"
        ]
    },
    "Content": {
        "Simple": {
            "Subject": {
                "Data": "hoge-subject"
            },
            "Body": {
                "Html": {
                    "Data": "hoge-body"
                }
            },
            "Headers": [
                {
                    "Name": "X-HOGE-HEADER-1",
                    "Value": "hogehoge"
                },
                {
                    "Name": "X-HOGE-HEADER-2",
                    "Value": "piyopiyo"
                }
            ]
        }
    }
}
% aws-v1 sesv2 send-email --cli-input-json file://hoge.json           
{
    "MessageId": "0106018e115f3d4a-483d4dc4-f060-48c0-b94a-94c12fb2f999-000000"
}

受信したメールのソースを確認してみると、送信時に指定したカスタムヘッダーを確認することが出来ました。

% cat hoge-subject.eml 

:

From: hoge0306@mail1.tak1wa.com
To: hogehoge@example.com
Subject: hoge-subject
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-HOGE-HEADER-1: hogehoge
X-HOGE-HEADER-2: piyopiyo
Message-ID: <0106018e115f3d4a-483d4dc4-f060-48c0-b94a-94c12fb2f999-000000@ap-northeast-1.amazonses.com>
Date: Wed, 6 Mar 2024 01:27:18 +0000
Feedback-ID: 1.ap-northeast-1.DyzgXV4ryrxHyJuJ28jpeei4aIo+MChMQzZfLJfMJ2s=:AmazonSES
X-SES-Outgoing: 2024.03.06-23.251.234.1
:

さいごに

本日は Amazon SES API v2 で RAW 以外の送信方法でもカスタムヘッダーがサポートされたので使い方を紹介しました。

これまで Amazon SES を使いつつ、カスタムヘッダーのためだけにアプリ側で MIME 形式のデータを生成していた場合は、シンプル送信に切り替えることが出来ますね。
公式ドキュメントによればパフォーマンス上のメリットなどは特に無さそうですが、実装側の可読性は上がりそうなのでカスタムヘッダーのみであればシンプルに API 呼び出し時にパラメータを引き渡す方法を使っても良いのではないでしょうか。

2024.03.09 追記

What's New でもアナウンスされました。