Yuto Blog

Yuto Blog

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
Le Minh Thien Toan

Tác giả:Yuto Yasunaga

Xin chào các bạn. Mình là kỹ sư IT đang làm việc ở Nhật Bản. Mình tạo blog này để chia sẻ về cuộc sống và những kinh nghiệm trong quá trình học tập và làm việc.
Hy vọng bài viết này sẽ có ích cho bạn.