Amazon SES でドメイン検証してメールを送信してみた
2019-11-19Amazon SES からメールを送信するには、メールアドレスまたはドメインを検証する必要があります。今回はドメインを検証してメールを送信するところまでやってみたのでそのメモです。
目次
概要
Amazon SES (以下、SES) からメールを送信してみます。
SES からメールを送信するためには、送信元となる メールアドレスを検証 する方法と、送信元となるメールアドレスの ドメインを検証 する方法があります。
メールアドレスの検証では、 test@michimani.net
というアドレスを検証することでこのアドレスからメールを送信することができるようになります。
一方、ドメインの検証では、 miichimani.net
というドメインを検証することで、 test-desu@michimani.net
や test-dayo@michimani.net
など、ドメインさえ michimani.net
であれば @
以前はなんでもよくなります。
今回は後者の ドメインを検証 してメールを送信してみます。
ちなみに Amazon SES は 2019年11月時点では東京リージョン (ap-northeast-1) で利用できないため、バージニア北部リージョン (us-east-1) で利用します。
やってみる
具体的な手順は下記の流れになります。
- SES でドメイン検証
- サンドボックステスト実施
- SES からの送信制限解除をサポートに申請
- 外部ドメインに対してメール送信してみる
1. SES でドメイン検証
マネジメントコンソールで SES のダッシュボードを開き、サイドメニューの Domains を選択し、 Verify a New Domain ボタンを押します。
ドメインを入力するモーダルが表示されるので、検証したいドメインを入力して Verify This Domain ボタンを押します。

Generate DKIM Setting のチェックはしてもしなくても OK です。DKIM とは DomainKeys Identified Mail のことで、送信者が暗号化キーでメールを署名できる規格のことです。Amazon SES ではここでチェックすることによって全ての送信メールに DKIM 署名を追加することができます。また、ここでチェックしなくても、 SES の SendRawEmail API を使ってメールを送信する際に、個別に DKIM 署名を追加することができます。
詳しくは下記のページを参照してください。
Verify This Domain を押すと、ドメイン検証に必要な DNS レコードが表示されます。

ドメインを管理している DNS サービスにてこれらのレコードを登録する必要がありますが、 Route 53 を使用する場合は、モーダル内の Use Route 53 ボタンを押すことで自動で設定してくれます。
Use Route 53 ボタンを押すと登録する DNS レコードをチェックする画面に映ります。ここでは MX レコードに関する Warning が表示されます。
内容としては、 この操作によって既存の MX レコードが上書きされるため、このドメインでメールの受信をする予定がなければチェックをしないように という内容です。

登録するレコードにチェックを入れて Create Record Sets ボタンを押すと、 Route 53 にレコードが追加され、ドメインの検証が開始されます。
検証結果は SES のドメイン一覧画面で確認できるので、しばらく時間を置いて次のキャプチャのようになっていれば検証完了です。

2. サンドボックステスト
ドメイン検証は完了しましたが、この時点では外部のドメインに対してメールを送信することができません。 (サンドボックス状態)
なので、一旦いま検証が完了したドメイン宛にメールを送信してみます。
ドメイン一覧からドメインをチェックした状態で、上にある Send a Test Email ボタンを押します。
すると、テストメール送信用のモーダルが表示されるので、 From , To, Subject, Body をそれぞれ入力します。To 欄には From と同じメールアドレスを指定します。

Send Test Email ボタンを押してエラーが表示されずにモーダルが閉じれば、送信完了です。
送信状態については、サイドメニューの Sending Statistics にある Deliveries のグラフで確認できます。

3. SES からの送信制限解除をサポートに申請
サンドボックスにて送信できることが確認できたので、外部ドメインに対して送信ができるように、AWS のサポートセンターから SES 送信制限緩和を申請します。
サポートセンターのページから Create case を押して, Service limit increase を選択します。

Limit Type で SES 送信制限 を選択します。
するといくつかの入力欄が出てきますが、全て空欄・未選択でもかまいません。

続いて制限緩和を申請する対象のリージョン、緩和する対象とその値を指定します。
リージョンは今回は バージニア北部 を選択します。
緩和の対象は 希望する一日あたりの送信クォータ と 希望する最大送信レート から選べますが、 Add another request ボタンを押すことで複数の緩和対象を指定できるので、両方指定することもできます。
今回はとりあえず 希望する一日あたりの送信クォータ を 100 で申請してみます。

続いて申請の理由を入力します。

最後にサポートからの返答言語、返答方法 (この場合は Web のみ選択可) を選択して、 Submit すれば申請完了です。

あとはサポートからの返答を待つだけです。
サポートの契約プランにもよると思いますが、 Basic プランだと制限緩和まで 13 時間くらいかかりました。余裕を持って申請したほうが良さそうです。
ちなみにサポートからの返答は下記のような内容でした。

希望する一日あたりの送信クォータ を 100 で申請しましたが、結果として 50,000 になりました。もしかするとこれが最低クォータなのかもしれません。
値を指定しなかった 希望する最大送信レート については 毎秒 14 メッセージ となりました。
ちなみに SES の制限緩和申請は初めてだったのですが、内容としてはクォータの制限緩和で、サンドボックスからの移動はその副産物みたいな感じなんででしょうか。
4. 外部ドメインに対してメール送信
無事にサンドボックス状態を抜け出すことができた (はず) なので、実際に外部ドメインにメールを送信してみます。
方法としては、サンドボックス状態で実施した方法と同じです。
今回は Gmail 宛に送信してみます。

送信してすぐに受信が確認できました。

また、 AWS CLI からも送信を試してみます。
$ aws ses send-email \
--from ses-cli@michimani.net \
--to <hogehoge>@gmail.com \
--subject "Test mail from Amazon SES via CLI" \
--text "This is a tes mail from Amazon SES via CLI." \
--region us-east-1
{
"MessageId": "0100016e7c582b54-90ffeb69-f983-4a2c-b471-12345abcdefg-000000"
}
こちらも無事に受信できました。

まとめ
Amazon SES でドメイン検証をしてメールを送信してみた話でした。
EC2 からメールを送信していると送信制限に引っかかったり、またその制限解除も Elastic IP ごとに申請が必要だったりしてスケーラビリティに欠けます。
送信するメールの件数が少なかったとしても、送信には Amazon SES を使用した方が長期的にみると良さそうです。
ちなみに EC2 にホスティングしているアプリケーションから SES を利用してメールを送信する場合、毎月最初の 62,000 通は無料で、それ以降 1,000 通ごとに 0.10 USD の料金が発生します。
その他、ファイルを添付した場合の追加料金や、送信だけでなく受信もした場合、また EC2 上のアプリではなく E メールクライアントやその他のソフトウェアから SES を使用した場合の料金については下記を参照してください。
comments powered by Disqus