13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-10-30

前はずっと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'

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

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?