SES 設定してEC2からメール送信する方法

2024.02.20
SES 設定してEC2からメール送信する方法
この記事をシェアする

こんにちは!スカイアーチHRソリューションズのKotaroです。

今回はAWSサービスでメールサーバを使用できるAWS SESを紹介します。

SESは主にEC2やサーバーレス環境からメール送信したいときに使われるサービスとなっています。

イメージがつかないところもあったので私なりにまとめていこうと思います。

ちなみに受信で使う場合はAWS WorkMailというサービスが別であるようです。(東京リージョンは現在非対応でした)

SES設定

事前準備

今回のデモではメールで使用するドメインを取得していますので、実際にやってみる場合はドメインを準備する必要があります。

IDの作成

SESを使用するリージョンを選び、左にある設定からIDを選択します。

※以前は受信設定がバージニア北部・オレゴン等しかできませんでしたが、東京でも受信設定が出来るようになりました。今回は東京リージョンで作成していきます。

以下クラスメソッド記事参照

https://dev.classmethod.jp/articles/ses-email-receive-tokyo/

メール送信に使用するドメインを記載し、そのほかはデフォルトで作成を選択します。

※メールアドレスに関しては DKIM-based domain verificationが使えない為、基本はドメイン認証を選択できるようドメインを準備します。

IDステータスが検証済みになっていることを確認します。(数分で検証済みに変わりました)

※ドメインがRoute 53で管理されていない場合は自分で該当のドメインに行き、CNAME登録をする必要があります。該当IDのDomainKeys Identified Mail (DKIM)に登録する情報が載っています。

サンドボックスの解除

SESのサービスから左タブのアカウントダッシュボードを選択し、サンドボックスの解除を行います。

※こちら解除しないと登録していないメールアドレスに送信できなかったり、メールの送信回数に制限が出るため、解除する必要があります。

右上の「設定を始める」から「本稼働のリクエスト」を選択します。

以下に必要事項を記入しリクエストの送信をします。

  • メールタイプ:
    • マーケティング – 購入や情報のダウンロードなどのマーケティングおよびプロモーション コンテンツを含む、見込み客または顧客の対象リストに 1 対多で送信されます。
    • トランザクション – 通常、Web サイトでの購入やパスワード リセット要求などのユーザー アクションによってトリガーされ、各受信者に固有の 1 対 1 ベースで送信されます。

詳細な内容は以下AmazonのURLから確認出来ます。

https://docs.aws.amazon.com/ses/latest/dg/request-production-access.html

問題ない場合は数日で解除されます。(今回は検証の為解除していません)

バウンス通知・苦情通知の設定

バウンス通知や苦情通知を無視してしまうとSESの利用が停止になるため、そういった通知が来た際に把握できるようSNSの設定をします。

また左にある設定からIDを選択します。「通知」のタブから「フィードバック通知」の編集を選択します。

SNSトピックがまだないと思いますので、SNSトピックを作成し、サブスクリプション設定までしたうえで、上2つに作成したトピックを選択し保存します。(今回はsampleで作成しました)

バウンスメール動作確認

左にある設定からIDを選択し、選択したIDの右上にある「テストEメールの送信」を選択します。

送った後にSNSのサブスクリプションで設定したメールアドレスにメールが届いていることを確認します。

EC2の設定

事前にメール送信用のEC2を用意します。

EC2にIAMロールをアタッチ

SESのAPI利用でのメール送信はIAMの権限が必要になるため、以下の「E メール送信アクションへのアクセスのみを許可」のポリシーを作成します。

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Effect":"Allow",
      "Action":[
        "ses:SendEmail",
        "ses:SendRawEmail"
      ],
      "Resource":"*"
    }
  ]
}

詳細は以下公式ページを参照してください。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/control-user-access.html#iam-and-ses-examples-email-sending-actions

作成したポリシーを含むIAMロールを作成し、EC2にアタッチします。

EC2からメールの送信

※サンドボックスの解除が出来ている場合実施することが出来ます。

以下のコマンドを実施し、サンプル送信します。

詳細は以下公式ページを参照してください。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-an-email-using-sdk-programmatically.html

# yum install pip
# pip install boto3
# vi amazon-ses-sample.py #ファイルの編集は上記リンクを参考に作成する
# python amazon-ses-sample.py

まとめ

バックエンド側があまり分からない為、使用するイメージが湧きにくいですが送信する設定に関しては出来たかと思っています。Amazonの買い物でも使用されているサービスで、構築するケースも多いのでしっかり理解していきたいです。

この記事をシェアする
著者:Kotaro
ポケモンが好きなAWSエンジニア