0
0

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.

【Rails6】Action Mailer お問い合わせメールを自分のGmailに送信させる方法

Last updated at Posted at 2022-05-30

実現したいこと

この記事では、以下のような、よく見る問い合わせフォームを使ってユーザーから問い合わせがあったときに、特定のGmailに問い合わせメールが届くようにするための方法を紹介しています。

お問い合わせフォーム 2022-05-30 21.39.51.png

実装環境

ruby 2.6.6
Rails 6.0.3.6

手順

①Googleアカウントでアプリパスワードを発行する。

⚠アプリパスワードを発行するアカウントは、問い合わせメールを受け取りたいGmailのアカウントがいいです。

②2段階認証プロセスを有効にする

2段階認証の設定の仕方
まず、下の画像のページに進み、「Googleアカウントを管理」をクリック。
Googleアカウント 2022-05-30 22.10.00.png

次に、遷移先の左側にある「セキュリティ」をクリック。
セキュリティ 2022-05-30 22.01.21.png

そしたら、「Googleへのログイン」内にある2段階認証プロセスをクリックして、2段階認証を有効にする。

③2段階認証を有効にしたら、アプリパスワードを設定する

2段階認証を有効にすると、下のようになる。
アプリパスワード 2022-05-30 22.03.05.png

アプリパスワードをクリックすると以下の画面に遷移。
アプリパスワード 2022-05-30 22.03.25.png

ここから、「アプリを選択」をクリックして、自分のつくったアプリを登録したいときは、「その他(名前を入力)」を選択し、自分の作ったアプリ名を入力して、「生成」。
アプリ名 2022-05-30 22.03.38.png

すると、以下のような画面がでてくる。これが、「アプリパスワード」(黄色の部分の16桁)。
⚠このアプリパスワードは一度しか出せないので、この画面に遷移したら、この16桁のパスワードをメモするか、すぐに次の作業に移った方がいいです!
アプリパスワード画面 2022-05-30 22.03.59.png

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にも記述する必要がある。

開発環境側

config/environments/development.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

本番環境側

config/environments/production.rb
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の中身が異なるので、注意!!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?