[AWS] SESを利用しSMTPサーバの準備を行う

AWS SESを利用するとSMTPサーバが簡単に用意できます。EC2から利用する場合、無料枠が月間6.2万通まで用意されていますので、個人的な利用や小規模なプロジェクトであれば料金は気にしなくても良さそうです。

今回はSMTPサーバの準備をするところまでを取り上げます。

SESの料金

簡単にまとめると以下の通りです。詳細や最新情報はSESの料金ページをご覧ください。

利用方法 無料枠 料金
EC2から送信 62,000通 1,000通ごとに0.10USD
添付ファイル1GBにつき0.12USD
EC2以外から送信 なし 1,000通ごとに0.10USD
添付ファイル1GBにつき0.12USD
メール受信 1,000通 1,000通ごとに0.10USD
Eメールチャンク1,000通につき0.09USD

メール受信の「チャンク」の考え方は以下の通り。メールのサイズによって料金が変わる感じですね。

ヘッダー、メール本文 (文字と画像)、添付ファイルを含めた 256 キロバイト (KB) の受信データが受信メールチャンク 1 単位となります。E メールを受信するために Amazon SES を使用するとき、受信メールチャンク 1,000 通につき、0.09USD を支払います。 完全な受信メールチャンクのみカウントされます。たとえば、受信メールが 768 KB の場合、受信メールチャンクは 3 としてカウントされます。受信メールが 255 KB の場合、受信メールチャンクは 0 としてカウントされます。

※料金詳細>受信メールチャンクより

SESでSMTPサーバを準備する

リージョンを選択

SESのトップページを訪れたら、忘れないうちにリージョンの選択を行っておきます。

これまではモヤっとした気分で海外リージョンを選んでいたのですが2020年7月に東京リージョンが開放されました。出来たてホヤホヤです。これから設定する方はラッキーですね。

ドメイン認証

メールを送信する際に「From」に指定するアドレスのドメインの設定を行います。事前にRoute53ドメインを登録しておくと難しいことを考えずボタンをクリックするだけで済みます。

左側にあるメニューから「Domains」をクリック。「Verify a New Domain」ボタンをクリック。

入力欄が現れますので、認証したいドメインを入力し、「Generate DKIM Setting」にチェック。最後に「Verify This Domain」ボタンをクリックします。

Route53を利用しているドメインの場合、自動的に挿入されるDNSレコードの確認画面が表示されるので、一読し画面下部にある「Use Route53」ボタンをクリック。キャプチャは省略しますが似たような画面が表示されますので画面下部にある「Create Record Sets」をクリック。

SESのドメイン一覧ページに戻ってきました。先ほど追加したドメインが表示されていますが、オレンジ(赤)の文字が表示されている間は認証処理が裏側で走っているため、しばらく待ちます。

特に問題なければ数分程度で認証完了(緑色の文字が表示)になります。

このタイミングでRoute53を確認すると、先ほどのレコードが追加されているのを確認することができます。運用中に間違えて削除しないよう気をつけてくださいw

SMTPサーバにIAMユーザーを追加

SMTPサーバ自体はすでに用意されています。

左側のメニューの「SMTP Settings」をクリックすると、右側にSMTPサーバの情報が表示されます。

執筆時点では以下の通りです。

項目
ドメイン(FQDN) email-smtp.ap-northeast-1.amazonaws.com
ポート番号 25, 465, 587のいずれか
TLSの利用 可能

これはリージョンを利用している全員が共通で使う情報だと思われますので、このSMTPサーバを利用するためのIAMを作成する必要があります。というわけでここから先の操作はIAMでユーザーを作成できる権限が必要です。

先ほどのページにあった「Create My SMTP Credentials」ボタンをクリック。IAMユーザーのユーザー名を聞いてきますが、デフォルトで入力されているので不都合が無ければそのままの状態で「作成」ボタンをクリック。

IAMユーザーが作成されますので、ユーザー名とパスワードをメモしておきます。また念の為「認証情報のダウンロード」からCSVファイルをダウンロードしておくと良いでしょう。

Sandboxから脱出する

初期状態ではメール送信に強めの制限がかけられている「Sandbox」と呼ばれる環境にいます。特に1番目の制限が強烈ですね。

  1. FromとToのメールアドレスは認証済みのドメイン、メールアドレス以外は指定できない
  2. 24時間あたり200通まで送信可能
  3. 1秒間に1通まで送信可能

このままだと本番運用は難しいためAmazon(AWS)へ制限緩和の申請を行います。

左側のメニューから「Sending Statistics」をクリック、「Edit your account details」ボタンをクリック。

表示された内容に沿って適当に入力していきます。

Mail type
メールの種類「プロモーション(宣伝)」か「トランザクション(登録確認やアラートなど)」
Website URL
利用先のWebサイトのURL
Use case description
具体的に何に利用するのかを自由分で説明。日本語でも大丈夫な気がしますが機械翻訳した英語を記入。
Additional contact addresses
返信を希望するメールアドレス。複数の指定が可能。
Preferred contact language
AWSから返信をもらう際に英語か日本語を選びます。

いつ承認されるの?

ちなみにリクエストが承認されるまでの時間はドキュメントによると以下の通り。

AWS サポートチームは、お客様のリクエストに対して、24 時間以内に一次回答を行います。 迷惑なコンテンツや悪意のあるコンテンツを送信するためにシステムが悪用されないように、各リクエストを慎重に検討する必要があります。可能であれば、24 時間以内にリクエストを承認します。ただし、お客様から追加情報を取得する必要がある場合は、お客様のリクエストの解決に時間がかかる場合があります。

※Moving out of the Amazon SES sandboxより

つまり、承認まで1日以上かかる可能性があることを念頭に置く必要があります。

承認されるとどうなるの?

以下のようなメールが到着します。

AWSへログインし、SESの「Sending Statistics」を見るとSandboxの表記が消え上限がアップしていることを確認できます。1日5万通、1秒間に14通まで送信できます。これでも足りない場合は送信割り当ての増加をリクエストします。

今回は申請から承認まで1.5日程度かかりました。状況によって変わると思いますが、早めに申請しておきたいですね。

以上でSESを利用したSMTPサーバの準備は完了です。あとは適当なプログラムやメールソフトから、IAMを作成した際のIDとパスワードを利用して送信することができます。

参考ページ