Open6

AWS SES(Simple Email Service)のメモ

katkat

概要

https://aws.amazon.com/jp/ses/

料金

https://aws.amazon.com/jp/ses/pricing/

無料枠

  • SES の使用開始後の最初の 12 か月間は、毎月最大 3,000 件のメッセージ料金が無料
  • 無料枠対象
    • 送信 E メール
    • 受信 E メール
    • Virtual Deliverability Manager の送信 E メール処理

メッセージ=基本的には1つの送信や受信するメール
送信と受信合算して月3000件までが無料ということ。
Virtual Deliverability Manager の送信 E メールについては1つの送信で2メッセージになる。

料金体系

サービスタイプ 料金 追加料金
アウトバウンドメール 0.10 USD/1,000 件の E メール 送信する添付ファイルの 1 ギガバイト (GB) のデータごとに 0.12 USD*
インバウンドメール 0.10 USD/1,000 件の E メール 着信 E メールチャンク 1,000 件につき 0.09 USD (詳細については、「料金の詳細」をご覧ください)
Mail Manager
-オープンイングレスエンドポイント** エンドポイントあたり 50 USD/月
-E メール処理*** 0.15 USD/1,000 件の E メール 着信 E メールチャンク 1,000 件につき 0.09 USD (詳細については、「料金の詳細」をご覧ください)
-アーカイブ 2 USD/GB (取り込まれた E メール) 0.19 USD/GB/月 (アーカイブの保存と検索)
-E メールのアドオン 選択したアドオンソリューションによって異なります

アウトバウンドメールは送信メール、インバウンドメールは受信メール
ざっくり1,000件単位で料金が増えていくと思っておけばよい。

その他

  • 送信先のIPを固定(専用IPを使用)したい場合、1IPあたり月24.9ドル
  • 送信メールの添付ファイルデータ 1 ギガバイト (GB) ごとに 0.12USD
  • 受信メールのデータ量256Kバイトで受信メールチャンク 1 単位として計算し、1000チャンク毎に0.09ドル、256K未満の場合はチャンク0扱い

ガイド

https://docs.aws.amazon.com/ses/latest/dg/Welcome.html

katkat

開始方法

個別メールの場合

アドレスを登録すると、登録したアドレスに承認用のメールが送られてくるので、メールのリンクをクリックして送信可能に。
コンソールからテストメール送信確認などして送信テスト可能。

ドメインの場合

  • ドメインを登録したあと、AWS側でドメインの検証が行われる。
  • ドメインの検証が通るには、おそらくDKIMの設定をDNSに登録し、それが検証通らないとダメそう。
    DNSの設定をしくじって1日程度たってから間違いに気づきDNSを修正したが、3日たっても検証通らず検証エラーに。
    検証エラーになると、再検証の依頼を出せるが、結局1日たっても検証されないので、一度SESのドメイン設定を削除して、作り直したら1時間ほどで検証通りました。
  • 検証には最大3日掛かると注意書きがあるが、DNS側のTTLにもよるが、日本で設定している分には数時間~せいぜい1日たっても検証通らない場合は設定がおかしいと思った方が良い。
    本番用は上記の通り時間を要したが、STG用に作成した設定は1時間立たずに検証済みになりました。
  • ちなみに、SESを再作成した際、DKIMのDNS登録内容が変わるかと思いましたが、削除前と同じ値。都度ランダムではなく、指定ドメインで固定なのかも?
  • DKIMの設定値はTXTレコードではなく、CNAMEに設定する。設定内容はコンソールですべて確認可能なので、そこからコピペ可能。レコード情報をCSVダウンロードも可能なので、DNS管理者が別だったりする場合はダウンロードした内容を共有してあげるのも良いでしょう。

https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-domain-procedure

katkat

Laravelからの使用

ただ送るだけなら、AWSアカウントのキーとリージョンを環境変数で指定して、メール用の環境変数にチャネルses、sesのhostを指定したら基本OK
Fromのアドレスは、普通のサービスだと自身のドメインを指定すると思いますので、
事前にSESにカスタムFROM用ドメインを登録し、MXレコードやSPF用のレコードをDNSに登録して検証済みになっておく必要があります。
昨今のご時世的にはSPF、DKIM、DMARCはすべて設定しておくのが良いでしょう。

これがまとまっていると思います。
https://qiita.com/hiroaki-u/items/986b523998d5e415fc4d

katkat

メール受信

受信可能なリージョンが意外と少ないので注意。
東京は利用可能。東京からは送れないという1年位前の記事も見たので、割と最近受信できるようになったのかもしれません。

地域名 リージョン メール受信エンドポイント
米国東部(バージニア州北部) us-east-1 inbound-smtp.us-east-1.amazonaws.com
米国東部(オハイオ) us-east-2 inbound-smtp.us-east-2.amazonaws.com
米国西部(オレゴン) us-west-2 inbound-smtp.us-west-2.amazonaws.com
アジア太平洋(ジャカルタ) ap-southeast-3 inbound-smtp.ap-southeast-3.amazonaws.com
アジア太平洋(シンガポール) ap-southeast-1 inbound-smtp.ap-southeast-1.amazonaws.com
アジア太平洋(シドニー) ap-southeast-2 inbound-smtp.ap-southeast-2.amazonaws.com
アジア太平洋(東京) ap-northeast-1 inbound-smtp.ap-northeast-1.amazonaws.com
カナダ(中部) ca-central-1 inbound-smtp.ca-central-1.amazonaws.com
ヨーロッパ(フランクフルト) eu-central-1 inbound-smtp.eu-central-1.amazonaws.com
ヨーロッパ(アイルランド) eu-west-1 inbound-smtp.eu-west-1.amazonaws.com
ヨーロッパ(ロンドン) eu-west-2 inbound-smtp.eu-west-2.amazonaws.com

SESでメール受信するためには、MXレコードに上記のメール受信エンドポイントを登録する必要があります。
送信用(カスタムFROM用)とは別に登録が必要です。また、送信用と同じサブドメインにせず別ドメインになる点、注意しましょう。

設定例:
 送信用:mail.example.com
 受信用:example.com

https://docs.aws.amazon.com/ses/latest/dg/regions.html

メール受信ルール

あとで

katkat

SESのメール受信

いわゆるメーラーのような受信ボックス的なものではない。
メアドやドメインを事前に登録しておき、そこに対してメールが送られたことをきっかけにAWSのサービスを起動する系の統合機能

受信ルールを設定することで実現する。

受信ルール

送信同様、個別のアドレスかドメインを指定し、指定先にメールを受信した後のアクションを取り決めていく。
アクションは1つの受信ルールに対して複数設定が可能。
アクションの並び順を指定できるため、並列で動作するというよりはシーケンシャルに順番に動作する感じか? 調べ中

IP アドレスフィルタも可能

アクション

  • Amazon S3 バケットへの配信
  • Amazon SNS トピックへの公開
  • Amazon WorkMail への送信
  • Amazon Lambdaの実行

受信ルールセット

受信ルールセットは、複数の受信ルールをひとまとめにする入れ物。

  • 受信ルールを作るために、まずは受信ルールセットを作る必要があります。
  • 受信ルールセットを有効化することで受信ルールが適用されます。作成時は無効状態
  • 有効化できる受信ルールセットはリージョン単位で1つのみ
  • 受信ルールセット内の受信ルールは順番を持ち、並び順の上から順に受信ルールを評価していきます。受信ルールに該当するアドレスやドメインがあればアクションを実行。
  • 順序が上の受信ルールを実施した後も、次の受信ルールを評価して、該当すればアクションを実行、とすべての受信ルールを評価するまで行います。

参考

概要
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/receiving-email.html
概念とユースケース(ここ見るとイメージ沸きやすい)
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/receiving-email-concepts.html

katkat

メールの転送

直接的な転送機能はSESとしては、受信ルールを用いてWorkMailへ送信するのが王道か。

WorkMail

  • 1ユーザあたり4ドル/月かかる
  • 東京リージョンでは提供されていない。下記3リージョンのみ(2024年6月時点)
    eu-east-1:米国東部 (バージニア北部)
    eu-west-2:米国西部 (オレゴン)
    eu-west-1:欧州 (アイルランド)

小規模だったり、送信メインで受信はほぼない、みたいだとコスト面で微妙
海外リージョンを通ることに抵抗がある場合も現状選択できない。

Lambda実行アクションを用いるのがよさそう。
お試しで実装してみると、SESからLambdaに送られるイベントの中にはメール本文が含まれていないため、S3への配信アクションもセット必須となりそう。

参考

https://dev.classmethod.jp/articles/ses-received-from-unspecified-people/
https://dev.classmethod.jp/articles/ses-lambda-mail-transfer/