📮

[Rails,Mailer]新規登録後に完了メールを送る

2021/03/09に公開

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 という名前で作ります。

  1. 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

  1. 'WelcomeMailer'にメソッドの追加

-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!は私の好きな実況者さんがよく仰っているのでなんとなく使っているだけです。お好きに変えて遊んでみてください〜!!

  1. メール本文の作成

app/views/welcome_mailer/ディレクトリにwelcome_email.html.erbwelcome_email.text.erbファイルを作成します。

app/views/welcome_mailer/welcome_email.html.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
app/views/welcome_mailer/welcome_email.text.erb
Hello, <%= @user.name %>.
Welcome to my family!!
登録完了しました。

内容はお好きに。htmlの方はもちろんhtmlで書きます。

  1. Gmail用にAction Mailerを設定する

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 }

  1. 新規登録時にメールを送ってもらうようにする

次に、registrations_controllerのcreateにメール送信するよう記述していきます。
参考

$ rails generate devise:controllers users

app/controllers/usersに6つコントローラが現れたかと思います。
今回は新規登録時にメールを送るようにしたいので、registrations_controller.rbに書いていきます。

app/controllers/users/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