LoginSignup
3
6

More than 3 years have passed since last update.

[Rails]ユーザー新規登録時にメールを自動配信する機能を実装する[備忘録]

Posted at

はじめに

先日、Ruby on Railsでアプリケーションを作成しました。
その中で、ユーザーに新規登録をしてもらうと同時に、ユーザーのメールアドレス宛にメールを送る機能を作りました。
ネットで調べつつ、試行錯誤しながら実装したのですが、色々な情報が入り乱れていて、少しだけ分かりにくかった印象があったので、備忘録も兼ねて、ここでまとめたいと思います。
それでは参りましょう!

メール送信機能を記述

config/environment/development.rb
#以下を追記
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => 'smtp.gmail.com',
  :port => 587,
  :domain => 'gmail.com',
  :user_name => "hoge@gmail.com",  # user_name, passwordはご自身のものに変更して下さい。
  :password => "hogehoge",
  :authentication => :plain,
  :enable_starttls_auto => true
}

メーラーを作成

メール送信におけるコントローラー的役割を果たすMailerを作成します。
rails g mailer <メーラー名> <メソッド名>

ターミナル
$ rails g mailer ThanxMailer complete_registration

このコマンドを打つことにより、app/mailers/application_mailer.rbapp/mailers/thanx_mailer.rbが生成されます。
次に、それらのテンプレートファイルを編集していきましょう!!

メーラーを編集

app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  default from: '管理者'
  layout 'mailer'
end
app/mailers/thanx_mailer.rb
class ThanksMailer < ApplicationMailer
  def complete_registration(user)
    @user = user
    mail(:subject => "登録ありがとう!!!!", to: user.email)
  end
end

メール本文の作成

views/thanx_mailer/complete_registration.text.erb
<%= @user.name %> 様

会員登録ありがとう!!!!

コントローラへの記述

app/controllers/users_controller.rb
def create
  @user = User.new(user_params)
  if @user.save
    ThanxMailer.complete_registration(@user).deliver
  end
end

メーラーは、メーラー名.メソッド名と記述することで、クラスメソッドを呼び出すように実行できます。
実際の送信はdeliverメソッドが行います。

おわりに

メール送信機能自体は、記述する量も比較的少ないため、理解がしやすいと思います。
ただただコピペするだけでなく、一つ一つの意味をしっかり理解していきたいですね。

3
6
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
3
6