LoginSignup
69
77

More than 3 years have passed since last update.

rails でお問合せフォームを作り、自分のメールアドレスに送信させる方法

Last updated at Posted at 2020-02-26

railsで簡単にお問合せフォームを作り自分のメールアドレスに送信させる

railsに標準搭載のaction mailerを使用して簡単にお問合せフォームを実装させる。

まずはじめに、お問合せ内容を保存するためのInquiryモデルを作ります。

Inquiryモデルは、nameカラムと、messageカラムを持ちます。

$ rails g model inquiry name:string message:string
$ rails db:migrate

次に、action mailer を作成していきます

$ rails g mailer inquiry

このinquiryの名前に特に意味はないので、好きな名前でやってもらって大丈夫です。

実行されると、このようにいくつかのファイルが作成されます

Running via Spring preloader in process 32746
      create  app/mailers/inquiry_mailer.rb
      invoke  erb
      create    app/views/inquiry_mailer
      invoke  test_unit
      create    test/mailers/inquiry_mailer_test.rb
      create    test/mailers/previews/inquiry_mailer_preview.rb

次に、メールの送信機能を実装するため、app/mailers/inquiry_mailer.rbに追記をしていきます。

inquiry_mailer.rb
class InquiryMailer < ApplicationMailer
# -----追記------
  def send_mail(inquiry)
    @inquiry = inquiry
    mail(
      from: 'system@example.com',
      to:   'manager@example.com',
      subject: 'お問い合わせ通知'
    )
  end
# -----追記ここまで----
end

こちらで使用できるメソッドはこちらになります。

オプション できること
from 送信元メールアドレス
subject メールの件名
to メールの送信先アドレス
cc ccのメールアドレス
bcc bccのメールアドレス

メール本文のレイアウトを作成する

メール本文のレイアウトを作成するためには、命名規則に従ってファイルを作成します。

.app/views/メイラー名_mailer/メイラークラスのメソッド名.text.erb

今回の場合は
app/views/inquiry_mailer/send_mail.text.erb
を作成しましょう。

そして中に

send_mail.text.erb
<%= @inquiry.name %> 様 から問い合わせがありました。
・お問い合わせ内容
<%= @inquiry.message %>

を追記しましょう。

メールをプレビューで確認する機能

次に、実際にお問合せフォームを送る前に自分のお問合せ内容を確認するプレビュー機能を作成していきます。
action mailerに元から搭載されている機能なので簡単にできます。

まず

test/mailers/previews/inquiry_mailer_preview.rb

# Preview all emails at http://localhost:3000/rails/mailers/inquiry_mailer
class InquiryMailerPreview < ActionMailer::Preview
# ----追記-----
  def inquiry
     inquiry = Inquiry.new(name: "侍 太郎", message: "問い合わせメッセージ")

     InquiryMailer.send_mail(inquiry)
   end
#----追記ここまで----
end

そしてここでターミナルで

$rails s

をし、サーバーを起動させます。
そして
http://ホスト名:3000/rails/mailers/inquiry_mailer
にアクセスしてみてください。

大体の方は
http://localhost:3000/rails/mailers/inquiry_mailer
ですね。
すると


Inquiry Mailer
・inquiry

と表示されますので
inquiryをクリックしましょう。

すると
Screenshot from Gyazo

と言う画面が出てきます。
今回はformatをHTMLに変えているので皆様の画面より少し文字が大きめに書かれていますが問題ないです。

Gmailでメールを実際に送信してみましょう

まずメールサーバーを設定します。

config/environments/development.rb


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

をファイル内のどこでもいいので追記してください。(※一番上のclass名~一番下のendの間でお願いします)

メールを送信するために、自分のメールアドレスとパスワードを書き加えます。

config/environments/development.rb


config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
 address:              'smtp.gmail.com',
 port:                  587,
 domain:               'gmail.com',
#-----変更点---------------------------
 user_name:            'aaaaa@gmail.com',
 password:             'aaaaaaaaaa',
#----変更点ここまで-----------------------
 authentication:       'plain',
 enable_starttls_auto:  true
}

そしてこちらのファイルにも自分のメールアドレスを書き加えます

inquiry_mailer.rb
class InquiryMailer < ApplicationMailer
  def send_mail(inquiry)
    @inquiry = inquiry
    mail(
      from: 'system@example.com',
#----------変更点--------------
      to:   'aaaaa@gmail.com',
#----------変更点ここまで---------
      subject: 'お問い合わせ通知'
    )
  end
end

ここまできたら、あとは確認のため、rails コンソールからメール送信を実行します。

$ ご自身のファイルディレクトリにいく
$ rails c
irb(main):001:0> inquiry = Inquiry.new(name: "侍 太郎", message: "問い合わせメッセージ")
irb(main):002:0> InquiryMailer.send_mail(inquiry).deliver_now

すると、自分のメールアドレスにメールが送信されたかと思います。

ですが、セキュリティの関係上警告メールが出る場合が多くあります。

これは憶測ですが、コードにそのままアドレスやパスワードを貼っているのが原因なので、この部分を環境変数に変えて、隠す方法を試してみてください。

そちらに関連する記事はこちらです
https://qiita.com/yuichir43705457/items/7cfcae6546876086b849

以上で終了です。

皆様できましたでしょうか?

参考にした記事
https://www.sejuku.net/blog/48739

69
77
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
77