後へ      Topへ      次へ

メール配信

蔵書の貸出しや返却など状況が変わった時に、
関係者にメールを配信したいことがあります。
WEB を操作しているだけで、
必要な時に必要なメールが自動で配信されるようにします。

参考リポジトリ: https://github.com/Bonv-dev/book_mgmt/commit/16545d3
\app\mailers\log_mailer_mailer.rb
\app\views\log_mailer_mailer\change_status_email.html.erb
\app\views\log_mailer_mailer\change_status_email.text.erb
\app\controllers\books_controller.rb
\app\mailers\log_mailer.rb

初期設定

メール設定は、\config\environments フォルダにある、
環境ファイルで行います。

インストール

メーラーのクラスを LogMailerMailer、
メール配信用のメソッドを change_status_email としたい場合、
ruby bin/rails generate mailer LogMailer change_status_email
と実行します。

が生成されます。

log_mailer_mailer.rb は、

class LogMailerMailer < ApplicationMailer
  def change_status_email
    @greeting = "Hi"

    mail to: "to@example.org"
  end
end

のようになります。

メール本文は、
HTML用が change_status_email.html.erb、
TEXT用が change_status_email.text.erb、
に書きます。
実際のメールは、multipart になります。

text のみ、html のみ、も可能。  
不要なほうの erb ファイルを消すだけでOKです。

 

mail

実際にメールを出す流れは以下になります。

  1. コントローラ側から、メールコードを呼ぶ。
    e.g.
    \app\controllers\books_controller.rb 上、
    LogMailer.change_status_email(必要なパラメータを設定).deliver_now
  2. メールコードがメールオブジェクトを生成し、コントローラに返す。
    e.g.
    \app\mailers\log_mailer.rb 上で、
    def change_status_email(パラメータ)
    mail(subject, to, from, cc などのパラメータ)
    end
  3. コントローラ側がメールオブジェクトを受け取り、
    .deliver_now でメールが配信されます。

メールコード側はメールオブジェクトを生成するだけにして、
deliver_now はコントローラ側で実行するのが一般的です。

規約により、
change_status_email を呼んだら、  
メール本文は
  change_status_email.html.erb
  change_status_email.text.erb
が自動で選択されます。
これを
template_path と template_name で
変更する方法もあります。
が、過去うまく動かないケースもあったのでお勧めしません。

後へ      Topへ      次へ