[Rails,Mailer]新規登録後に完了メールを送る
Sign up完了メールを送る
アウトプットの場所が欲しかったので、ここを使わせていただいております。
つい2月ほど前より言語を触り始めました新参者ですので、間違いやわかりにくさ等あるとは思いますがご容赦ください。
少しづつ改善していきます。備忘録です。
Railsガイド v6.1 とこちらを参考にしました。
5.からは ⚠︎User機能をdeviseとして実装していること⚠︎ が前提となっています。
以下を行っていきます。
-
メールの設定
app/mailers/xxx_mailer.rbにメソッドの記載を行う
app/views/welcome_mailer
にメール文面の作成、
config/environments/development.rb
でファイルに送信するGmailアカウントを設定 -
新規登録後にメールを送るようにする
registrations_controller.rb
に記述していく
↑に合わせてroutes.rb
の編集
今回はSign upしたら登録アドレスにメールが送られるようにしたいので、
とりあえず WelcomeMailer
という名前で作ります。
$ rails g mailer WelcomeMailer
上記実行しますといくつかフォルダやファイルが作られます。
app/mailers/welcome_mailer.rb
class WelcomeMailer < ApplicationMailer
end
app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: "from@example.com"
layout 'mailer'
end
-app/mailers/welcome_mailer.rb
class WelcomeMailer < ApplicationMailer
default from: 'notifications@example.com'
def welcome_email
@user = params[:user]
mail(to: @user.email, subject: 'welcome to my family!')
end
end
上記で'welcome_email'メソッドができました。
welcome to my family!は私の好きな実況者さんがよく仰っているのでなんとなく使っているだけです。お好きに変えて遊んでみてください〜!!
app/views/welcome_mailer/
ディレクトリにwelcome_email.html.erb
とwelcome_email.text.erb
ファイルを作成します。
app/views/welcome_mailer/welcome_email.html.erb
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Hello, <%= @user.name %>.</h1>
<p>
Welcome to my family!!<br/>
登録完了しました。
</p>
</body>
</html>
app/views/welcome_mailer/welcome_email.text.erb
Hello, <%= @user.name %>.
Welcome to my family!!
登録完了しました。
内容はお好きに。htmlの方はもちろんhtmlで書きます。
config/environments/development.rb
に記述していきます。
私が他を知らないだけで、Railsガイドによると
Action MailerにMail gemが導入されたので、config/environments/$RAILS_ENV.rbファイルの設定は以下のように非常に簡単になりました。
とのことなので、別にdevelopment.rb
でなくても大丈夫です。
config/environments/development.rb
..
..
#ActionController-Gmail
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'example.com',
user_name: 'xxx@gmail.com',
password: 'アプリケーションパスワード',
authentication: 'plain',
enable_starttls_auto: true }
次に、registrations_controllerのcreateにメール送信するよう記述していきます。
参考
$ rails generate devise:controllers users
app/controllers/users
に6つコントローラが現れたかと思います。
今回は新規登録時にメールを送るようにしたいので、registrations_controller.rb
に書いていきます。
app/controllers/users/registrations_controller.rb
# frozen_string_literal: true
class Users::RegistrationsController < Devise::RegistrationsController
# before_action :configure_sign_up_params, only: [:create]
# before_action :configure_account_update_params, only: [:update]
# GET /resource/sign_up
# def new
# super
# end
# POST /resource
- # def create
- # super
- # end
+ def create
+ super
+ WelcomeMailer.with(user: @user).welcome_email.deliver_later
+ end
# GET /resource/edit
# def edit
.
.
routes.rb
devise_for :users, :controllers => {
:registrations => 'users/registrations',
}
以上になります。
まだあやふやな部分が多いので、きっちり学んで別の場所にも使えるようにしたいです。
がんばるぞ〜〜!!
Discussion