実現したいこと
この記事では、以下のような、よく見る問い合わせフォームを使ってユーザーから問い合わせがあったときに、特定のGmailに問い合わせメールが届くようにするための方法を紹介しています。
実装環境
ruby 2.6.6
Rails 6.0.3.6
手順
①Googleアカウントでアプリパスワードを発行する。
⚠アプリパスワードを発行するアカウントは、問い合わせメールを受け取りたいGmailのアカウントがいいです。
②2段階認証プロセスを有効にする
2段階認証の設定の仕方
まず、下の画像のページに進み、「Googleアカウントを管理」をクリック。
そしたら、「Googleへのログイン」内にある2段階認証プロセスをクリックして、2段階認証を有効にする。
③2段階認証を有効にしたら、アプリパスワードを設定する
ここから、「アプリを選択」をクリックして、自分のつくったアプリを登録したいときは、「その他(名前を入力)」を選択し、自分の作ったアプリ名を入力して、「生成」。
すると、以下のような画面がでてくる。これが、「アプリパスワード」(黄色の部分の16桁)。
⚠このアプリパスワードは一度しか出せないので、この画面に遷移したら、この16桁のパスワードをメモするか、すぐに次の作業に移った方がいいです!
④credentials.yml.enc
を編集。
⚠Rails5.2からdotenv
はあまり推奨されていないみたいなので、credentials.yml.enc
を使うことを奨めます。
$ EDITOR="vi" bin/rails credentials:edit
初期状態は次のようになっている。
# aws:
# access_key_id: XXXX
# secret_access_key: XXXXX
# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: XXXXXXXXXXXXXXXXX
これを、次のように変更する。
# aws:
# access_key_id: XXXX
# secret_access_key: XXXXX
# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: XXXXXXXXXXXXXXXXX
gmail:
user_name: 'XXXXX@gmail.com' #Gメールアドレス
password: 'XXXXXXX' #アプリパスワード
保存して、終了!
ここでの操作はvimを使うので、vimがわからない方は下のサイトを!
https://www.engilaboo.com/what-is-vim/
また、上のマークダウンにあるuser_nameやpasswordの部分は何でも大丈夫です!
たとえば、次のような名前でもOK!
gmail:
address: 'XXXXX@gmail.com' #Gメールアドレス
app_password: 'XXXXXXX' #アプリパスワード
名前がなんでもいい理由は、credentials.yml.enc
に記述したデータは以下のようにして取り出すためです。
Rails.application.credentials.gmail[:user_name]
⑤Action Mailerの設定
⚠開発環境ごとに設定しないといけないので注意!! たとえば、開発段階でメールの送受信を確認したいときにはconfig/environments/development.rb
に記述すればいい。しかし、このままだと、本番時(デプロイしたとき等)では、development.rb
にしか記述されていないため、メールの送受信ができない。
なので、本番環境でもメールの送受信を行いたいときはconfig/environments/production.rb
にも記述する必要がある。
開発環境側
require "active_support/core_ext/integer/time"
Rails.application.configure do
# 省略
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
domain: 'gmail.com',
port: 587,
user_name: Rails.application.credentials.gmail[:user_name], #Gmailアドレス(credentials.yml.encに記載)
password: Rails.application.credentials.gmail[:password], #アプリパスワード(credentials.yml.encに記載)
authentication: :login
}
# 省略
end
本番環境側
require "active_support/core_ext/integer/time"
Rails.application.configure do
# 省略
config.action_mailer.default_url_options = { host: アプリのURL }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
domain: 'gmail.com',
port: 587,
user_name: Rails.application.credentials.gmail[:user_name], #Gmailアドレス(credentials.yml.encに記載)
password: Rails.application.credentials.gmail[:password], #アプリパスワード(credentials.yml.encに記載)
authentication: :login
}
# 省略
end
開発環境と本番環境で、config.action_mailer.default_url_options
の中身が異なるので、注意!!