はじめに
こんにちは株式会社TOKOSのナオキです!
今回は、RailsのActionMailerを使用したメール処理とletter_opener_webを使用したデバック方法を解説します。
この記事では以下の内容について取り上げています。
- ActionMailerの説明と基本的な使い方
- letter_opener_webを使用したメール送信のデバック方法
- rails初学者の方
- 開発でメール送信機能を実装する方
ActionMailerの説明と基本的な使い方
ActionMailerは、Railsに標準で組み込まれているメール送信を行うためのライブラリです。
例えば、ユーザー登録後の確認やパスワードリセット通知等で必要になるメール送信機能を簡単に実装できます。
まず、ActionMailerで使うMailerクラスを作成します。
以下のコマンドで新しいMailerを作成できます。
※ UserMailerは任意のクラス名です。ユーザー関連のメールを送信したいためUserMailerにしています。
rails generate mailer UserMailer
上記のコマンドを実行したら以下が作成されます。
app/mailers/user_mailer.rb
→ メール送信用のクラスapp/views/user_mailer
→ 対応するメールテンプレート用ディレクトリ
app/mailers/user_mailer.rb
ファイルのUserMailerクラスにユーザー登録時に送信する完了メールの実装をします。
class UserMailer < ApplicationMailer
# ユーザー登録完了メールのメソッド
def registration_completed_mail(user)
@user = user
mail(
to: @user.email,
subject: "ユーザー登録完了"
)
end
end
上記のregistration_completed_mail
では引数でuserの情報を受け取っています。mail
内のto
には宛先を入れ、subject
には件名を入れます。
メールの本文を作成するためapp/views/user_mailer
ディレクトリ配下に、以下のHTML形式、テキスト形式の2つのファイルを作成します。
app/views/user_mailer/registration_completed_mail.html.erb
→ HTML形式app/views/user_mailer/registration_completed_mail.text.erb
→ テキスト形式
なぜ2つのファイルを作成するのかは、受信者のメールを見る環境が違う場合があるからです。
HTML形式は、画像やデザインが使用でき見た目的にも良いメールを作成することができます。
多くの人が使っているメールアプリ(Gmail等)では、このHTML形式で表示されます。
テキスト形式は、HTMLが使用できないメールアプリやシンプルな表示が好まれる場合に使用されます。
例えば古いデバイスや、HTMLメールをブロックしている設定のメールアプリではテキスト形式しか見ることができません。
なので、どちらの形式も用意しておくことで受信者のメールを見る環境が違っていても対応できます。
<h1>ユーザー登録完了のお知らせ</h1>
<p><%= @user.name %>様の登録が完了しました。</p>
ユーザー登録完了のお知らせ
<%= @user.name %>様の登録が完了しました。
コントローラーからメールの送信を行います!
今回はユーザー登録時にメールを送信したいので、ユーザーが@user.save
によって登録された後にメール送信のコードを記述します。
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
# ユーザー登録後に登録完了メールを送信
UserMailer.registration_completed_mail(@user).deliver_now
redirect_to @user
else
render :new
end
end
end
deliver_now
はRailsのActionMailerでメールを即時に同期的に送信するためのメソッドです。
上記のようにコントローラーに記述することでメールの送信が実行できます。
ただ開発環境でメールの送信を確認するにはSMTPサーバーを設定するなどをしなければいけません。
そんなときに簡単にメール送信の確認が出来るライブラリがあります。
それがletter_opener_web
です。
letter_openerとletter_opener_webを使用したメール送信のデバック方法
letter_opener
は、Railsアプリケーションでのメール送信のデバッグに便利なGemです
通常、開発環境ではSMTPサーバーを通してメール送信を行いますが、誤送信のリスクやSMTPの設定の手間がかかったりします。
それに比べletter_opener
を使用することでメールの内容をブラウザ上で簡単に確認することができます。
letter_opener_web
は、これまでに送信されたメールの履歴を一覧管理できるライブラリです。letter_opener
と組み合わせることで、これまでに送信されたメールの履歴をブラウザ上で確認できるようになります。
通常のletter_opener
では、メール送信後にブラウザに表示されます。なのでletter_opener
だけではメール履歴の管理ができません。単発のみのメール送信であればこちらでも大丈夫です。
それに対してletter_opener_web
を使用したら、ブラウザで履歴として一覧表示させることができるので、過去に送信したメールを一覧で確認することができます。
まずはGemfileに以下のコードを追加します。
gem 'letter_opener_web', group: :development
その後、ターミナルにて以下のコマンドでインストールします。
bundle install
開発環境のみでletter_opener
を使用したいので、開発環境に限定してメール履歴管理のエンドポイントを作成します。config_routes.rb
に以下の設定を追加します。
if Rails.env.development?
mount LetterOpenerWeb::Engine, at: "/letter_opener"
end
上記のコードにより、開発環境でhttp://localhost:3000/letter_opener
にアクセスすることで、メールの履歴を確認できるようになります!
config/environments/development.rb
に以下を追加します。
config.action_mailer.delivery_method = :letter_opener_web
config.action_mailer.perform_deliveries = true
上記により、メール送信がletter_opener_web
を通って行われ、ブラウザ上の履歴ページで確認できるようになります。
実際にブラウザ上では以下の画像のように表示されます。
これによりメールの内容があっているのか等の確認をすることができます!
さいごに
RailsのActionMailer
とletter_opener
を活用することで、開発環境でのメール送信がとても簡単になります。
Railsのメール機能を最大限に活用して、便利なアプリケーションを開発してみてください!