はじめに
こんにちは株式会社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
enddeliver_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のメール機能を最大限に活用して、便利なアプリケーションを開発してみてください!
ISSEN 
