Action Mailer

Action Mailer

rails g mailer メーラー名

以下が生成される。

Running via Spring preloader in process 61351
      create  app/mailers/hogehoge.rb
      invoke  haml
      create    app/views/hogehoge_mailer

mailers/メーラ名.rb

いわゆるコントローラみたいなもの。
メーラーに対してアクション(?)を定義していく。

class HogeMailer < ApplicationMailer
  default from: "hogehoge@example.com"

  def fuga(com,ir,user)
    @com = com
    @user = user
    @ir = ir
    mail(
      subject: "IR from #{com.name}", 
      to: @user.email
    ) do |format|
      format.text
    end
  end
end

mailer/アクション名.text.erb

いわゆるviewファイル。通常のviewと同じ感じで書けばOK.
htmlでメールが送れない時に備えて、textファイルとhtmlファイルと用意するのが普通らしい。

/views/hoge_mailer/fuga.text.erb
<%= @user.name %> 様

<%= @com.name %> からIRの発表あり。
<%= @ir.title %> 

メールの送信

メーラー.アクション().deliverで順に指定すればOK。

HogeMailer.fuga(com, ir, user).deliver

実際にGmailで送るには

以下の設定を書き込む。

confi/environment/development.rb
  
config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:  'smtp.gmail.com',
    domain:   'gmail.com',
    port:             587,
    user_name:        'hogehoge@gmail.com',
    password:         'PASSWORD',
    authentication:   'plain',
    enable_starttls_auto: true
  }

letter_opener_web

開発環境で実際にメールを送るのは確認が面倒なため、web上で確認が可能なgemを使うと楽。

gemfileに以下を追記

group :development do
  gem "letter_opener_web"
end

config/environments/development.rbに以下を記述。

  config.action_mailer.delivery_method = :letter_opener_web

routes.rbに以下を追記。

  if Rails.env.development?
    mount LetterOpenerWeb::Engine, at: '/letter_opener'
  end

letter_opener_webの無効化

confi/environment/development.rb  
# config.action_mailer.delivery_method = :letter_opener_web
config/routes.rb
# if Rails.env.development?
#   mount LetterOpenerWeb::Engine, at: '/letter_opener'
# end

コメント