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

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

![お問い合わせフォーム 2022-05-30 21.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/1a216619-d6aa-1f9d-d844-973de54177f4.png)

## 実装環境
ruby 2.6.6
Rails 6.0.3.6


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

## ②2段階認証プロセスを有効にする
2段階認証の設定の仕方
まず、下の画像のページに進み、「Googleアカウントを管理」をクリック。
![Googleアカウント 2022-05-30 22.10.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/96fbbe1e-00fc-ccf9-33c6-e5a96668122d.png)

次に、遷移先の左側にある「セキュリティ」をクリック。
![セキュリティ 2022-05-30 22.01.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/3be78fa7-e08d-db53-25fe-2f859deab205.png)

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


## ③2段階認証を有効にしたら、アプリパスワードを設定する
2段階認証を有効にすると、下のようになる。
![アプリパスワード 2022-05-30 22.03.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/a64223ad-f9a4-7582-71bf-46c7c64b3e8f.png)

アプリパスワードをクリックすると以下の画面に遷移。
![アプリパスワード 2022-05-30 22.03.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/caa7f134-ba6e-fcd0-3b22-03416b3fc3b2.png)

ここから、「アプリを選択」をクリックして、自分のつくったアプリを登録したいときは、「その他(名前を入力)」を選択し、自分の作ったアプリ名を入力して、「生成」。
![アプリ名 2022-05-30 22.03.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/4016fd9e-e38e-4d29-57fd-ba1b47caa9d1.png)

すると、以下のような画面がでてくる。これが、「アプリパスワード」(黄色の部分の16桁)。
⚠このアプリパスワードは一度しか出せないので、この画面に遷移したら、この16桁のパスワードをメモするか、すぐに次の作業に移った方がいいです！
![アプリパスワード画面 2022-05-30 22.03.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1293645/bf770cf8-9948-ded6-3f76-7bffe4775b98.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```の中身が異なるので、注意！！