Ruby開発未経験のJava/PHPエンジニアがRuby On Railsでお問い合わせフォームを作る:メール送信編

Ruby On Railsでメールを送るには「ActionMailer」というものを使うそうです。

以下のようにクラスを作成します。クラス名はわかりやすくXXXMailerとすると良さそうです。

rails g mailer InquiryMailer

SMTPサーバの設定

config/environments/development.rb

メールサーバーの設定を行います。

 config.action_mailer.default_url_options = { :host => "localhost", :port => 3000 }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => "smtp.gmail.com",
    :port => 587,
    :domain => 'smtp.gmail.com',
    :user_name => "メールアドレス",
    :password => "パスワード",
    :authentication => 'plain',
    :enable_starttls_auto => true,
  }

メール送信の設定

app/mailers/inquiry_mailer.rb

class InquiryMailer < ApplicationMailer
  def inquiry_email(inquiry)
    @inquiry = inquiry
    mail to: inquiry.email, subject: "お問い合わせありがとうございます", bcc: "sample@example.com"
  end
end

@XXXでテンプレートに変数を渡せるようです。

メールテンプレート

app/views/inquiry_mailer/inquiry_email.text.erb

以下のように設定してみました。htmlメールとプレーンメールの振り分けルールはよくわかりません。

以下の内容でお問い合わせを受け付けました。

氏名:<%= @inquiry.name %>
郵便番号:<%= @inquiry.zip %>
都道府県:<%= @inquiry.prefecture %>
住所:<%= @inquiry.address1 %> <%= @inquiry.address2 %>
メールアドレス:<%= @inquiry.email %>
お問い合せ内容:<%= @inquiry.content %>
問い合わせ日時:<%= @inquiry.created_at %>

メール送信処理の呼び出し

今回はお問い合わせの登録が完了したらメールを送信したいので、

app/controllers/inquiries_controller.rb

のcreateに追加をします

     respond_to do |format|
       if @inquiry.save
         InquiryMailer.inquiry_email(@inquiry).deliver
         format.html { redirect_to @inquiry, notice: 'Inquiry was successfully created.' }
         format.json { render :show, status: :created, location: @inquiry }
       else

成果物

https://github.com/YoshiteruIwasaki/banana-mail/commit/e771a553eb0c982ac3a20ac2681018f41a4867a0?diff=unified