0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails gmailを使ったaction mailerでContact formを作成

Posted at

#早速作っていこ〜

Railsガイドによると

Action Mailerを使うと、アプリケーションのメイラークラスやビューでメールを送信することができます。メイラーの動作はコントローラときわめて似通っています。メイラーはActionMailer::Baseを継承し、app/mailersに配置され、app/viewsにあるビューと結び付けられます。

ということなのでgemとかいらないんです。

今回はcontact formに件名と内容をユーザーに打ってもらってそれをdbに保存してメールにも送るという構成で作っていきます。では必要なもの作っていきます
(docker-compose run 書くの長いので割愛 docker使ってないひとはこのままでok)

#モデル作っていきます
$ rails g model Contact name:string message:text
#おまじないいきま〜す
$ rails db:migrate

#ユーザーに入力してもらうformを作るためにコントローラー、ビューも作ります
$ rails g controller contacts new(newだけで十分です)

そういえば、modelにバリデーションで どちらのカラムにもpresence: true書いておくといいと思います。
空のメールが何件も届くかもしれないので

コントローラーの処理書いていきます

controllers/contacts_controller
def new
  @contact = Contact.new
end

def create
  @contact = Contact.new(contact_params)
  if @contact.save
    #↓あとで定義します(これでメール送信)
    ConatactMiler.contact_mail(@contact).deliver
    flash[:success] = 'メールを送信しました'
    redirect_to root_path #←お好きな場所へ
  else
    flash[:danger] = 'メールの送信に失敗しました'
    render :new
end

  def contact_params
    params.require(:contact).permit(:name, :message)
  end

ビューも書いちゃいましょう

views/contacts/new
<%= form_with(model: @contact, local: true) do |f| %>
    
  <%= f.label :name, '名前' %>
  <%= f.text_field :name %>

  <%= f.label :message, 'お問い合せ内容' %>
  <%= f.text_area :message, size: "5x10" %>

  <%= f.submit '送信' %>
  
<% end %>

ここまではいつも通りですね

本命のaction mailer作っていきます

$ rails g mailer contact

次はさっきのcontact_mailerを定義していきます

mailers/contact_mailer.rb
def contact_mail(contact)
  @contact = contact
  mail to: '自分のeメール', subject: 'メールの件名'
end

お次はメールの内容を作ります。

views/contact_mailer/contact_mail.text.erb←作ってください
<%= @contact.name %>様からお問い合わせがありました

・お問い合わせ内容
<%= @contact.message %>

次にgmailの設定を行っていきます

config/environment/development.rb
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  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",
    domain: 'gmail.com',
    port:587,
    user_name: '自分のgmail',
    password: 'パスワード', #←これはgmailのパスワードではなくgoogleアカウント管理画面で作成します    
    authentication: :login
  }

これの内容全部説明するのはめんどくさいので説明します

上からメール送信有効にする、送信できなかったらエラー吐く、メイラーはコントローラーとはHTTPリクエストのコンテキストが異なるから明示する、メールの送信方法、その設定諸々。

最後に

mailers/application_mailer.rb
  #default from: "from@example.com" ←デフォルト
  defult from: "自分のeメール"
  layout 'mailer'

これはしなくてもいいかもしれない。

完成!!

エラーがでたらエラーを潰していくしかないです。あと、eメールとpasswordは環境変数で設定しておかないとgitに上がっちゃいますのでご注意を!!!!

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?