蔵書の貸出しや返却など状況が変わった時に、
関係者にメールを配信したいことがあります。
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 フォルダにある、
環境ファイルで行います。
config.action_mailer 周辺です。メーラーのクラスを LogMailerMailer、
メール配信用のメソッドを change_status_email としたい場合、
ruby bin/rails generate mailer LogMailer change_status_email
と実行します。
\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が生成されます。
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です。
実際にメールを出す流れは以下になります。
\app\controllers\books_controller.rb 上、\app\mailers\log_mailer.rb 上で、def change_status_email(パラメータ) mail(subject, to, from, cc などのパラメータ)end.deliver_now でメールが配信されます。メールコード側はメールオブジェクトを生成するだけにして、
deliver_now はコントローラ側で実行するのが一般的です。
規約により、
change_status_email を呼んだら、
メール本文は
change_status_email.html.erb
change_status_email.text.erb
が自動で選択されます。
これを
template_path と template_name で
変更する方法もあります。
が、過去うまく動かないケースもあったのでお勧めしません。