Railsで、Action Mailerとletter_opener_webを初めて使いました
Action Mailer、すごくベーシックな実装なはずなのに、なんか、今まで縁がなかったんです。
Railsチュートリアルでやったのかな? そのへんも記憶にない...
ということで今回は、ローカル環境でletter_opener_web
を使ってメールを確認するところまで、やっていきます。
1. Gemfile
にletter_opener_web
を追加する
group :development do gem 'letter_opener_web', '~> 1.0' end
追加したら、コマンドラインでbundle install
します。
$ bundle install
メール確認用画面を、config/routes.rb
に追加します。
Rails.application.routes.draw do root to: "home#index" # 省略... mount LetterOpenerWeb::Engine, at: '/letter_opener' if Rails.env.development? end
2. config/environments/development.rb
に設定を追加
Rails.application.configure do # 省略... config.action_mailer.perform_caching = false config.action_mailer.default_url_options = { host: 'localhost:3000' } config.action_mailer.delivery_method = :letter_opener_web # 省略... end
production.rbにはメールの設定なんかを書いたりしますが、今回は割愛。
3. Mailer
を作成する
コマンドラインで生成します。
$ rails g mailer UserMailer
生成したメーラーを、必要に応じて調整します。
app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base default from: "[email protected]" def send_message_to_user(user) @user = user mail to: @user.email, subject: "メールの件名が入ります" end end
4. メール本文を作成する
app/views/user_mailer/send_message_to_user.text.erb
を作成します。
メソッド名.text.erb
という名前になるので注意しましょう。
ファイルの内容は以下のような感じです。
<%= @user.name %> さま いつもお世話になっております。 株式会社●●です。 この度は、キャンペーンにご応募いただきまして、ありがとうございました。 当選発表は、商品の発送をもってかえさせていただきます。 株式会社●●
5. メール送信処理
メール送信をしたいタイミングで、Mailerのメソッドを実行します。
class EntryController < ApplicationController def create @entry = Entry.new(entry_params) if @entry.save # ここでメールを送信する UserMailer.send_message_to_user(@entry.user).deliver_now redirect_to root_url else render 'new' end end end
6. メールが送られたのか確認する
最初に config/routes.rb
に追加した、メール確認用画面を開きます。
http://localhost:3000/letter_opener
を開くと、以下のようが画面が開き、送信処理があったメールを一覧できます。(実際に送信されているわけではありません)