#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に追記をしていきます。
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
を作成しましょう。
そして中に
<%= @inquiry.name %> 様 から問い合わせがありました。
・お問い合わせ内容
<%= @inquiry.message %>
を追記しましょう。
###メールをプレビューで確認する機能
次に、実際にお問合せフォームを送る前に自分のお問合せ内容を確認するプレビュー機能を作成していきます。
action mailerに元から搭載されている機能なので簡単にできます。
まず
# 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をクリックしましょう。
と言う画面が出てきます。
今回はformatをHTMLに変えているので皆様の画面より少し文字が大きめに書かれていますが問題ないです。
###Gmailでメールを実際に送信してみましょう
まずメールサーバーを設定します。
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.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
}
そしてこちらのファイルにも自分のメールアドレスを書き加えます
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
以上で終了です。
皆様できましたでしょうか?