18
10

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.

Gem sorceryを使い倒す④ 本番環境でメイラー設定

Last updated at Posted at 2023-11-15

使用環境

ruby:3.2.2
rails:7.0.7
Docker
Gmail
render

今回のデプロイ先はrenderを使用しました。
メールはGmailを設定します。

本番環境でパスワードリセットする挙動

  
1.ユーザーがパスワードの再設定をリクエストすると、ユーザーが送信したメールアドレスをキーにしてデータベースからユーザーを見つける
2.該当のメールアドレスがデータベースにある場合は、再設定用トークンとそれに対応する再設定ダイジェストを生成する
3.再設定用ダイジェストはデータベースに保存しておき、再設定用トークンはメールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく
4.ユーザーがメールのリンクをクリックしたら、メールアドレスをキーとしてユーザーを探し、データベース内に保存しておいた再設定用ダイジェストと比較する (トークンを認証する)
5.認証に成功したら、パスワード変更用のフォームをユーザーに表示する

  
ここまでは前回実装済みです。今回は本番環境の設定を行っていきます。

Gmail.comを使った実装手順

  
①.Googleでアプリパスワードを取得
②.環境設定ファイルに通信設定を記述
③.renderの設定

アプリパスワード取得

  
まず、アプリで使用するGoogleアカウントを作成します。

2段階認証が設定されていない場合は、まず2段階認証をオンにしてください。

Image from Gyazo
  
設定が有効になったら、2段階認証プロセスのページをもう一度開き一番下までスクロールするとアプリパスワードがあります。
Image from Gyazo

分かりやすい名前をつけて作成を押すだけ!(サンプル)
Image from Gyazo

このパスワードを覚えておく必要はないので、とおっしゃっていますが嘘です絶対にこのページで控えておいてください。

  

Railsの環境設定

  
【開発環境の設定変更】
開発環境でのメールの送信先を変更します。

config/environments/production.rb
  config.action_mailer.default_url_options = Settings.default_url_options.to_h
  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               '***.onrender.com',
    user_name:            ENV['GMAIL_USERNAME'],
    password:             ENV['GMAIL_PASSWORD'],
    authentication:       'plain',
    enable_starttls_auto: true 
  }

64行目に config.action_mailer.perform_caching = falseという行があるので、その下に記述すと分かりやすいです。

  
【解説】

config.action_mailer.delivery_method = :letter_opener_web
Railsアプリケーションでメールを送信する際に使用する配送方法(delivery method)を設定しています。

  
config.action_mailer.raise_delivery_errors = true
この設定は、メールの配信中にエラーが発生した場合に、例外を発生させるかどうかを設定します。trueに設定することで、メール送信時のエラーが発生した際にアプリケーションが例外を投げ、これによって開発者は問題を認識しやすくなります。
  

config.action_mailer.delivery_method = :smtp
メールの送信方法をSMTP(Simple Mail Transfer Protocol)に設定しています。SMTPはインターネットでメールを転送するための標準プロトコルです。

  
config.action_mailer.smtp_settings = {}
smtp_settingsハッシュでは、SMTPサーバーの詳細設定を行っています。これらの設定によりRailsはメールを送信するためにGmailのSMTPサーバーを利用することができます。

カラムの役割
説明
address: SMTPサーバーのアドレスです。Gmailの場合はsmtp.gmail.comを使用します。
port: SMTPサーバーのポート番号です。587はメール送信に一般的に使われるTLS(Transport Layer Security)を使用するポートです。
domain: メールを送信する際に使用されるドメイン名です。ここでは例として***.onrender.comが設定されています。
user_name: password: 環境変数を通して設定されるGmailのユーザー名とパスワードです。
authentication: SMTPの認証タイプです。ここでは'plain'が使われていますが、他にも'login'や'cram_md5'などがあります。
enable_starttls_auto: trueに設定することで、メール送信のセキュリティを強化するためにTLSを使用することをSMTPサーバーに対して指示します。

.envファイルの設定

  
今回、少人数のチーム開発だったので、credentials.yml.encで環境変数を管理すると、変更の際毎回EDITORを開くのがめんどくさくて.envで作成しました。

【gemのインストール】

.envファイルをrailsで扱うためには、`gem 'dotenv-rails'が必要です。

Gemfile
gem 'dotenv-rails'
bundle install

.envファイルはGitHubに上げないよう、.gitignoreに追記します。

.gitignore
.env

中身を編集していきます。

.env
GMAIL_USERNAME=***********@gmail.com #アプリキーを設定したメールアドレス
GMAIL_PASSWORD=ltxc **** **** scrd #アプリキー

USERNAMEにはアプリキーを設定したメールアドレスを記述します。このアドレスがメールの送信元になります。
PASSWORDに先ほどメモしたアプリキーを設定します。

    user_name:            ENV['GMAIL_USERNAME'],
    password:             ENV['GMAIL_PASSWORD'],

この形で変数を呼び出せます。

renderの設定

  
最後にrenderで環境変数を読み込めるようにします。
renderの設定したいアプリをDashboardから選び、EnvironmentのSecretFilesを設定します。
Image from Gyazo
Filenameを.envに設定します。
次にContentsをクリックすると開かれるファイルに、Railsの.envと同じ設定を記述します。
最後にSave Changesを押して内容を保存しましょう。(忘れると保存されません😂)
  

関連記事

参考資料

18
10
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
18
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?