はじめに
Rails アプリケーションからユーザーへメールを飛ばす方法としてAWS SESというサービスがあるので、こちらの使い方を説明させていただきます。
設定方法なので知っていればすぐにできるんですが、知らなければやり方を見つけるだけでかなり時間がかかってしまうと思います。
時間短縮の一助になれば嬉しいです。
関連リンク
Gmailを用いたActionMailerの使い方についても下記に載せておくので、必要であれば参考にしてください。。
- Gmailを用いた ActionMailer の使い方
アプリケーション作成
以下の項目については、上記の"Gmailを用いた ActionMailer の使い方"と同様となるため、そちらをご参照ください。
- Mailer作成コマンド(rails g mailer ~)
- Mailer
- Controller
- View
ドメイン関連
下記リンク先をご参照ください。
- AWSだけで独自ドメインを取得して自分のWebページを公開するまで[画像で解説] 2018冬
- 【AWS】Amazon SES / Messaging・Route53を用いてドメインメールを送信する
IAMユーザーの作成
下記リンク先をご参照ください。
- AWS IAMユーザー作成方法
config / yaml設定
config/development.rb
# ActionMailer Setting with AWS SES
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_caching = true
config.action_mailer.default_url_options = { host: Rails.application.secrets.host }
ActionMailer::Base.smtp_settings = {
:address => Rails.application.secrets.address,
:port => 587,
:domain => Rails.application.secrets.domain,
:authentication => :login,
:user_name => Rails.application.secrets.access_key_id,
:password => Rails.application.secrets.secret_access_key
}
config/production.rb
# ActionMailer Setting with AWS SES
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_caching = true
config.action_mailer.default_url_options = { host: Rails.application.secrets.host }
ActionMailer::Base.smtp_settings = {
:address => Rails.application.secrets.address,
:port => 587,
:domain => Rails.application.secrets.domain,
:authentication => :login,
:user_name => Rails.application.secrets.access_key_id,
:password => Rails.application.secrets.secret_access_key
}
secret.yml
development:
host: ec2-*****.ap-northeast-1.compute.amazonaws.com # EC2インスタンス の パブリック DNS (IPv4) を入力する。
access_key_id: A******************A # 上記で取得した値
secret_access_key: B******************************************B # 上記で取得した値
address: email-smtp.us-east-1.amazonaws.com # 自身が仕様しているリージョン
domain: c*****.com # 上記で取得した値
production:
host: <%= ENV['AWS_HOST'] %> # ElasticBeanstalk を使う場合、環境変数へ入力する。
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> # ElasticBeanstalk を使う場合、環境変数へ入力する。
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %> # ElasticBeanstalk を使う場合、環境変数へ入力する。
address: <%= ENV['AWS_ADDRESS'] %> # ElasticBeanstalk を使う場合、環境変数へ入力する。
domain: <%= ENV['AWS_DOMAIN'] %> # ElasticBeanstalk を使う場合、環境変数へ入力する。
まとめ
今回、ドメインを取得するところもAWSのサービスを使って説明をさせていただきましたが、ドメイン取得については他のサービスを使ったほうがコストが低いケースもありますので、あくまで一例とさせていただきます。
個人的には色々なサービスを使うよりもAWSでまとめて管理できるほうが管理コストも含めると安いのではないかなーと思います。
お好きな方法で取り組んでいただけたらなと思います。
参考
- Amazon SES SMTP 認証情報を取得する
- RailsのActionMailerからAmazon SESのSMTPでメールを送信する