actionmailerを使ってみる
榊間です
お盆とかで少し間が空いてしまったので久しぶりの更新です。
今日はアクションメイラーについて書こうと思います。
今回やりたいことは、inquireページからお問い合わせを送信した時、運営者側と利用者に通知のメールを送ることです。
準備
まずメイラーを生成します(今回はinquirymailerにします)
rails generate mailer InquiryMailer
formで以下のように書いときます。(simpleform使ってますが、要はemailとかもろもろの情報をハッシュ形式で渡してます)
<%= simple_form_for(@inquiry) do |f| %> ... <%= f.input :email %> ... <%= f.button :submit, "この内容で送信する" %> <% end %>
次にapp/mailerに生成されたinquiry_mailer.rbにdefaultメソッドと、complete_inquiry、notice_inquiry(この二つの名前は自由)メソッドを定義します。
# encoding: utf-8 class InquiryMailer < ActionMailer::Base default from: "defaultの送信元メールアドレスを書いてください" def complete_inquiry(inquiry) @inquiry = inquiry mail(to: "利用者のメールアドレス", subject: "題名です") end def notice_inquiry(inquiry) @inquiry = inquiry mail(to: "運営側のメールアドレス", subject: "問い合わせ通知") end end
そして、controllerにメールを送りたいタイミングで、inquire_mailer.rbに定義したメソッドを呼び出します。
引数には@inquiryを渡しており、inquire_mailer.rbや、最終的にはview(後述)で使われています。
# encoding: utf-8 class InquiriesController < ApplicationController before_filter :set_inquiry, only: [:new, :create] def new end def create if @inquiry.save InquiryMailer.complete_inquiry(@inquiry).deliver InquiryMailer.notice_inquiry(@inquiry).deliver redirect_to inquiries_path else render action: "new" end end private def set_inquiry @inquiry = Inquiry.new(params[:inquiry]) end end
あとはメールの内容をviewで生成します。
一番最初に生成されたview/inquiry_mailerに、inquiry_mailerに定義したメソッドに対応するファイルである、complete_inquiry.text.erbとnotice_inquiry.text.erbを生成し編集します。ここでは@inquiryを利用して、formで入力された内容(例えば名前やメールアドレスなど)を利用できます。文面はお好みで。
お名前:<%= @inquiry.name %> 様 メールアドレス:<%= @inquiry.email %>
これでメールが送られるようになったはずです。