おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

【Rails】開発中に送ったメールを確認する(Gem: letter_opener)

Ruby on Railsで開発中に送ったメールを確認する Gem letter_opener_webの紹介です。

環境設定

Gemfileletter_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">


letter_openerをwebで確認する
letter_openerをwebで確認する


letter_openerをwebで確認する(textメール)
letter_openerをwebで確認する(textメール)