Amazon SESを使ってみた

Amazon SES
どうもバックエンドエンジニアの「ささやーま」です。
今回は「Amazon SES」について検証してみました。

Amazon SESとは

Amazon SESは(Amazon Simple Email Service)の略で、Amazon WEBサービスのサービスの1つで、既存ドメインまたは既存メールアドレスを利用して、メール配信をしてくれるサービスです。
このサービスを利用するために、ドメイン取得やメールアドレスを新たに作成する必要はありません。
また、無期限の無料利用枠もあり、AWSで構築しているなら使わない手はないのではないでしょうか。

ただし無料枠には、以下の条件があります。

Amazon EC2またはAWS Lambda経由でホストされているアプリケーションからAmazon SESを呼び出した場合、月に62,000通のメッセージまでは無料で送信できます。この無料利用枠の有効期限はありません。

もちろんAmazon EC2またはAWS Lambda経由でなくてもSESサービスは利用できますが、無料枠は適用されないので注意が必要です。
しかし料金的には、送信する各1,000通のEメールにつき0.10USD。
ですから、料金のことはあまり気にせず使えるのではないかと思います。

Amazon SES 料金

なぜAmazon SES?

各社のメールボックスプランのSMTPを利用して大量のメール配信を行う際、送信数制限という壁にぶつかります
会員数の多いシステムだと配信できずに問題となります。

例えばS社のレンタルサーバのビジネスプロプランでは、以下の送信数制限になっています。

15分毎に約250通程度
(1,000通/時間 24,000通/日 換算、ただし15分に250通程度を超えない範囲)

この問題を解消するためにSESを使用します。
もちろん送信制限以外にもメリットはたくさんあります。
今回は触れませんが、Eメールのレスポンス(開封数、クリック数等)統計情報も取ることができます。

Amazon SES 特徴

検証

それでは検証していきましょう。
以下の条件下のもとLaravelからSESでEメール送信できるようにしてみます。

  • Amazon EC2, Amazon RDSでWEBシステム(Laravel)構築済

構成図

Amazon SES設定

SES用のIAMユーザを作成

  1. AWSマネジメントコンソールへログイン
  2. 左上サービスから「IAM」を選択
  3. 左メニュー「ユーザ」押下
  4. 「ユーザを追加」を押下
  5. ユーザ名を入力、AWSアクセスの種類を選択で「アクセスキー・プログラムによるアクセス」を選択して次へ
    aws-iam-access
  6. アクセス許可の設定で、「既存のポリシーを直接アタッチ」を選択、ポリシーで「AmazonSESFullAccess」を選択
    aws-iam-access02
  7. あとは何もしないで次へ次へ進む
  8. 最後に「アクセスキー」、「シークレットアクセスキー」が表示されます。CSVダウンロードするかメモを忘れずに!

SESの設定

  1. Amazon SES画面より「Create identity」を押下
    SES00
  2. Create identity画面に遷移します。
    今回は既存メールアドレスを送信元として使用するので「Email Address」を選択、「Email Address」に既存メールアドレスを入力して、「Create itentity」を押下。
    ses-01
  3. 指定したメールアドレスにAWSよりメールアドレスの確認リクエストメールが届きますので、メールに書かれたリンクを押下します。
    ses-03
  4. メールに書かれたリンクを押下して、検証に成功すれば以下の画面に遷移します。
    ses-05
  5. メールアドレスの検証成功がしたので、指定したメールアドレスでメールが送信できるかテストしてみます。「Send Test email」を押下
    ses-06
  6. From-addressに指定した検証成功したメールアドレス、Custom recipiientにも検証成功したメールアドレスを入力して送信します。
    ※この段階ではSandboxの状態ですので、任意のメールアドレスに送ることはできません。検証済のメールアドレスのみ送信可能です。
    ses-07
  7. Amazon SES経由で届いていれば成功です。
    ses-08
  8. Sandboxを解除して任意のメールアドレス宛に送るには本番環境リクエストが必要です。
    ses-09
    Snadboxでは、面倒ですがテストで使用するメールアドレスも検証処理を行うしかなさそうです。

Laravel設定

AWS SDK for PHPインストール

composer require aws/aws-sdk-php

環境変数名の変更

config/services.php

他のAWSサービスを使うときかぶるので、環境変数名変更


'key' => env('SES_ACCESS_KEY_ID'),
'secret' => env('SES_SECRET_ACCESS_KEY'),
'region' => env('SES_DEFAULT_REGION', 'us-east-1'),

.env


MAIL_MAILER=ses
MAIL_FROM_ADDRESS=上で登録したメールアドレス
MAIL_FROM_NAME=Laravel-SES
SES_ACCESS_KEY_ID=上で発行された「アクセスキー」
SES_SECRET_ACCESS_KEY=上で発行された「シークレットアクセスキー」
SES_DEFAULT_REGION=「リージョン」 例:東京リージョンの場合は、ap-northeast-1

弊社のオンライン予約パッケージシステム(RESASTA)のメール配信をAmazon SESに変更することができました!
予約メール配信も成功しています!

まとめ

非常に簡単にメール配信をAmazon SESに変更することができました。
いろいろなサービスを組み合わせて、しかも簡単に構築できることにすごく感動しました。
AWSを極めていきたいですね。
AWS認定試験でも受けようかな?
今回は以上になります。

スタッフ積極採用中

ジェイオンラインではスタッフを随時募集しております。
採用情報ページよりお気軽にお問い合わせください。