[アップデート] Amazon SES で送信前にメールアドレスの配信可能性を評価できる「メール検証」機能が追加されました
いわさです。
Amazon SES を使ってメール送信を行う時、バウンスレートなどをチェックしたり、送信メールアドレスリストの質を向上させることに気を使うと思います。
バウンスが起きたときに配信しないようにするとか、苦情率が高くならないようにメールアドレスのコンテンツ内容や送信先を適切な状態にするとか色々やれることはあるんですが、この特にバウンスを削減させるための便利なオプション機能が追加されました。
メール検証機能を使うことでメールアドレスに対して送信せずに評価することが出来ます。
今まではメール送信してその結果をちゃんと管理する、みたいなのを地道に行う必要があったのですが、メール送信前に無効なメールアドレスかチェックできるとかこのあたりの運用面を改善できそうです。
Amazon SES のコンソールを眺めてみると次のように E メール検証メニューが追加されています。ほほう。

本日はこれらを少し触ってみたので紹介します。
検証
まず、開発者は手動でメールアドレスの検証を行うことで出来て、コンソールの次のメニューから実行出来ます。
任意のメールアドレスを入力して検証することで、対象 E メールアドレスに対する配信性の評価を行うことが出来ます。

私が所有しているドメインの適当なメールアドレスっぽいものを指定してみましょう。検証用に TXT や MX とかのレコード登録していたはず。
メールアドレスを入力して検証ボタンを押してみると、結果を取得出来ました。

「メールボックスが存在します」が中になりましたが、全体的な有効性の信頼度は高です。配信しても良さそうですね。
なぜ「メールボックスが存在します」が中なのかはわからないですね。ドメインは良さそうだが、ユーザーまで見ているのか...?
% nslookup -type=MX mail1.tak1wa.com
Server: 127.0.2.2
Address: 127.0.2.2#53
Non-authoritative answer:
mail1.tak1wa.com mail exchanger = 10 inbound-smtp.ap-northeast-1.amazonaws.com.
公式ドキュメントによるとそれぞれの検証項目は次のように定義されています。(日本語への翻訳そのまま)
- 構文検証 ('HasValidSyntax') – 電子メール アドレスが適切な RFC 標準に準拠しており、正しい形式の有効な文字が含まれていることを確認します。
- DNS レコード ('HasValidDnsRecords') – ドメインが存在し、有効な DNS レコードがあり、電子メールを受信するように構成されていることを確認します。
- メールボックスの存在 ('MailboxExists') – 実際に電子メールを送信せずに、メールボックスが存在し、メッセージを受信できることを確認します
- 役割アドレス ('IsRoleAddress') – エンゲージメント率が低い可能性がある役割ベースのアドレス (admin@、support@、info@ など) を識別します。
- 使い捨てドメイン ('IsDisposable') – 送信者の評判に悪影響を与える可能性のある使い捨てまたは一時的な電子メール アドレスをチェックします。
- ランダム文字列パターン ('IsRandomInput') – ランダムに生成されたパターンをチェックします。
なるほど。MX レコードくらいであれば「構文は有効です」が高になるみたいですが、メールボックスの存在確認はまた別の仕組みでチェックしているみたいですね。
IsRoleAddress や IsDisposable などの観点も非常に面白いですね。
例えば私の所有ドメインでもユーザー名がadminの場合であればロールアドレスが高になりました。

次のような一時メールアドレスを取得できるサービスはいくつか存在すると思いますが、このサービスのドメインを想定してランダムなユーザー名で適当なメールアドレスを作ってみた場合だと次のように「使い捨て」「ランダム入力です」が高になりました。

特に Amazon SES だと RFC 非準拠メールアドレスは送信できないので気をつける必要があるのですが、この「構文は有効です」は RFC 準拠しているか見てくれるみたいです。
いくつか非準拠そうなメールアドレスを考えて試してみましたが結果は以下のようになりました。

API を使っての検証
実際にはマネジメントコンソールから手動で個別にメールアドレスの確認を行う機会は少なくて、プログラム上でチェック処理を実装することが多いと思います。
AWS API であれば SES v2 の API で GetMessageInsights という API が追加されており、ここで検証できるみたいです。
AWS CLI の場合はget-email-address-insightsを使って検証できます。
以下の場合であればIsValidがLOWなので信頼性が低く、送信しないほうが良さそうです。
HasValidDnsRecordsがLOWなのでこれは届かないだろうという判断されていそうです。
% aws sesv2 get-email-address-insights --email-address hoge@mail2.tak1wa.com
{
"MailboxValidation": {
"IsValid": {
"ConfidenceVerdict": "LOW"
},
"Evaluations": {
"HasValidSyntax": {
"ConfidenceVerdict": "HIGH"
},
"HasValidDnsRecords": {
"ConfidenceVerdict": "LOW"
},
"MailboxExists": {
"ConfidenceVerdict": "MEDIUM"
},
"IsRoleAddress": {
"ConfidenceVerdict": "LOW"
},
"IsDisposable": {
"ConfidenceVerdict": "LOW"
},
"IsRandomInput": {
"ConfidenceVerdict": "LOW"
}
}
}
}
フォームに入力された E メールアドレスの検証や登録を行う際などに一度だけ使うとか、ユーザー登録処理に組み込むことが出来そうですね。おもしろい。
自動検証
先程は手動で必要なメールアドレスだけ検証を行いましたが、メール送信前に自動で検証を行ってしきい値を超えている場合は送信しない。ということもできるみたいです。
「自動検証」メニューから有効化できます。

こちらは ID ごとではなくてアカウント(おそらくリージョンごと?)に設定するオプションになっています。
有効化しようとすると次のように確認のダイアログが表示されます。後述しますがメール検証機能は有料オプションになります。

有効化を選択すると、しきい値をどうするか選択できます。
「SES 管理のしきい値を使用」の場合はどういう基準かドキュメント上も明記されていませんが、送信パターンとレピュテーションの状況に基づいて SES が良い感じにしきい値を動的管理してくれるみたいです。

一方でユーザーが手動でしきい値を選択することも出来るのですが、信頼性が「高以上」か「中以上」のみの2つから選択が出来ました。少なくとも「低」に関しては送信されなくなりそうですね。

アカウント共通で自動検証を有効化か無効化するしかないのかな?と思ったのですが、どうやら設定セットを使うことで、個別にコントロールも出来るみたいです。
アカウントレベルは無効化しておいて、本番 ID で使う設定セットだけ有効化するとか、そのあたりが良い使い方になりそうですね。

なお、自動検証で抑制された場合もメール送信されたものとして通常のメール送信料金やクォータの対象になります。
あくまでもレピュテーションに影響を及ぼす前にコントロールできる機能として認識しておきましょう。
ダッシュボード
手動の場合も自動の場合も、検証結果はダッシュボード上で傾向を確認することが出来ます。
ダッシュボードメニューを確認してみると、サマリと時系列でそれぞれ信頼度が「低」「中」「高」の数を確認することができるようになっていました。

手動チェックの結果も計上されていましたが、例えば「低」の数値が非常に大きい場合は不正なメールアドレスを大量に登録されているとか、送信メールアドレスリストのクリーニングが必要という判断が出来ると思うので、このダッシュボードを見て何かアクションを出来そうです。
料金
このメール検証機能なかなか良いなと思いますが、有料オプションで料金ページにも追記されています。
手動と自動で料金が違うみたいですね。
手動あるいは API でチェックする場合は 1 チェックあたり $0.01 ドル、自動の場合は 1,000 通の送信あたり $0.01 ドル発生します。
さいごに
本日は Amazon SES で送信前にメールアドレスの配信可能性を評価できる「メール検証」機能が追加されたので使ってみました。
有料ですがコスト感が許容できれば、手動検証も自動検証もとても良い機能だと思いますね。
手動検証はアプリケーションのビジネスロジックに組み込めそうですし、自動検証も従来よりもメールアドレスのメンテナンスなしでレピュテーション管理の頻度が減る気がします。
ぜひ使ってみてください。








