【Rails】開発中に送ったメールを確認する(Gem: letter_opener)
Ruby on Railsで開発中に送ったメールを確認する Gem letter_opener_web
の紹介です。
環境設定
Gemfile
にletter_opener_web
を追加する。
# Gemfile group :development do gem 'letter_opener_web' end
開発環境モードの設定ファイルにメール送信の設定をします。
# development.rb Rails.application.configure do config.action_mailer.default_url_options = { host: localhost, port: 3000 } # `:letter_opener`を指定する config.action_mailer.delivery_method = :letter_opener # ログにエラーを表示するために`true`を設定 config.action_mailer.raise_delivery_errors = true # ここの指定は無くてokみたい # config.action_mailer.smtp_settings = { # address: SMTPのメールサーバ, # port: 587, # domain: 送付するドメイン, # authentication: "plain", # enable_starttls_auto: true, # user_name: メールサーバ認証用ユーザー, # password: メールサーバ認証用パスワード # } end
ブラウザでメールの送信結果を確認できるように設定します。
Rails.application.routes.draw do if Rails.env.development? mount LetterOpenerWeb::Engine, at: '/letter_opener' end end
これで、http://localhost:3000/letter_opener/
で確認することが可能です!
Mailerファイルを作成する
$ bundle exec rails g mailer new_user
Mailerファイルを設定する
# new_user_mailer.rb class NewUserMailer < ApplicationMailer default from: "hoge@example.com" def to_user(user) @user = user mail to: user.email, cc: 'cc@example.com', bcc: 'bcc@example.com', subject: 'ご登録ありがとうございます!' end end
# to_user.html.haml %p = "#{@user.name}様" %br ご登録ありがとうございます。 %p こちらからログインして下さい。 %br - url = new_user_url(@user.id) = link_to url, url, target: '_blank'
何もしていないとhtmlメールになりますが、format.text
を指定することでtextメールで送ることも可能です。
# new_user_mailer.rb class NewUserMailer < ApplicationMailer default from: "hoge@example.com" def to_user(user) @user = user mail to: user.email, cc: 'cc@example.com', bcc: 'bcc@example.com', subject: 'ご登録ありがとうございます!' do |format| format.text { render 'new_user_mailer/to_user', layout: false } # ここの部分 end end end
textメールの場合は改行や空白がそのまま本文となりますので、要注意です!
# to_user.text.erb <%= @user.name %>様 ご登録ありがとうございます。 こちらからログインして下さい。 <%= new_user_url(@user.id) %> <%= render 'signature' %>
# _signature.text.erb ■------------------------------------------------------------- opiyo株式会社 お客様相談お問い合わせ窓口 mail:opiyo@example.com -------------------------------------------------------------■
実行方法と結果の確認
# rails consoleに入る $ bundle exec rails c # メール送信する > NewUserMailer.to_user(NewUser.last).deliver_now => #<Mail::Message:70228559444700, Multipart: false, Headers: <Date: Wed, 16 Oct 2019 21:37:46 +0900>, <From: hoge@example.com>, <To: >, <Cc: cc@example.com>, <Bcc: bcc@example.com>, <Message-ID: <5da70f1ab3d89_12e833fdf64440e5c983a0@TakunoMacBook-puro.local.mail>>, <Subject: ご登録ありがとうございます!>, <Mime-Version: 1.0>, <Content-Type: text/plain>, <Content-Transfer-Encoding: base64>> # メール送信を非同期で > NewUserMailer.to_user(NewUser.last).deliver_later => #<ActionMailer::DeliveryJob:0x00007fbeb9a88db8 @arguments= ["NewUserMailer", "to_user", "deliver_now", #<NewUser:0x00007fbeb9a8b2e8 id: 13, name: "opiyo", age: nil, gender: "", birthday: nil, email: nil, created_at: Tue, 15 Oct 2019 20:13:15 JST +09:00, updated_at: Tue, 15 Oct 2019 20:13:15 JST +09:00, token: nil>], @executions=0, @job_id="24783fb5-9c1e-4005-a247-457a9e16d78d", @priority=nil, @provider_job_id=6292, @queue_name="mailers">