Ruby on RailsアプリでAWS SESを使ってメールを送信する方法(設定から実装まで)

Ruby on RailsアプリでAWS SESを使ってメールを送信する方法(設定から実装まで)

前はずっとSendGrid経由でメール送信機能を使っていましたが、せっかくAWSでアプリケーションをデプロイするのでAWSのサービスを使いたかったです。その為メール送信機能をSendGridからAWS SESに移動しました。

では、簡単に言うと Amazon Simple Email Service (SES) は、デベロッパーが任意のアプリケーションでメールを送信できるようにする、費用対効果の高い、柔軟でスケーラブルなメールサービスです。

SES設定

sandboxから移動

新規AWSアカウントではSESの制御があるます、確認済みのアドレスしか送信できなくて、1日最大200メールや1秒にあたり1メールなどの制限があります。
なので本番で使用できるにはリクエストをしなければなりません。

リクエスト方法はまずこのリンクにアクセス:http://aws.amazon.com/ses/fullaccessrequest

自分の場合は画像のように入力したら半日後で承認されました。

スクリーンショット 0003-10-30 11.54.00.png

スクリーンショット 0003-10-30 11.54.12.png

スクリーンショット 0003-10-30 11.54.18.png

承認成功通知メールが届いたらドメインの設定をします。

ドメイン設定

Amazon SESサービスのメニューから「Verified identities」に遷移して、「Create identity」をクリック
Identity typeは「Domain」を選択し、アプリケーションのURLだけ入力してから作成します。

スクリーンショット 0003-10-30 20.30.58.png

作成したドメインをクリックして、「Authentication」タブにある「View DNS records」をクリックするとCNAMEの値が現れるはずです。それぞれの名と値をコピーします。

スクリーンショット 0003-10-30 20.31.36.png

DNS設定

自分の場合はonamae.comでDNSレコードを追加します。先コピーしたCNAMEレコードをそれぞれ追加して保存します。

スクリーンショット 0003-10-30 20.33.27.png

ドメイン確認

それからAWS SES側の「Verified identities」に遷移して、問題なければ少し待つとステータスが「Verified」になります。自分の場合は大体5分以内でステータスが変わりました。

スクリーンショット 0003-10-30 20.34.24.png

ここまではSES側の設定が完了です!

IAMユーザ設定

アプリケーションからSES経由でメール送信するには「AmazonSESFullAccess」ポリシーを持つIAMユーザが必要です。そのポリシーをユーザまたはグループに添付します。

スクリーンショット 0003-10-30 19.13.27.png

そして、そのIAMユーザのアクセスキーIDとシークレットアクセスキーが手に入ったら、AWSコンソール側の設定が完了です!

Rails アプリケーション設定

aws-sdk-railsというGemを導入

Gemfile
gem 'aws-sdk-rails'

production.rbでSESを使う設定

config/environments/production.rb
  credentials = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
  Aws::Rails.add_action_mailer_delivery_method(
    :ses, 
    credentials:, # Ruby 3.1の文法
    region: 'ap-northeast-1'
  )

  config.action_mailer.default_url_options = { host: 'imeezi.com' }
  config.action_mailer.delivery_method = :ses
  config.action_mailer.perform_deliveries = true
  config.action_mailer.perform_caching = false
  config.action_mailer.raise_delivery_errors = true

ENV['AWS_REGION']環境変数設定

regionは「us-east-1」以外ならこの環境変数が必要です。

自分の場合はfigaroを使って環境変数を設定するので、EC2にアクセスしてapplication.ymlファイルを編集します。

AWS_REGION: 'ap-northeast-1'

以上です。やっと本番でメールが送信できました!

Updated by Yuto at 2022-01-29 21:22
0
Like this article