1
3

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.

Ruby on Rails メールの自動送信機能 実装

Posted at

##内容
登録されたメールアドレスに、確認メールを自動送信する機能を実装する。

##実装
###①アプリ作成
sampleというアプリを作ります。

$ rails new sample

ディレクトリを移動。

$ cd sample

新規に追加されたメールアドレスに送るアプリを作りますので、Userテーブルを作成します。
今回はカラムを2つにします。

$ rails g scaffold User name email

データベースを作成します。

$ rails db:migrate

##②メール送信設定
Gmailを送れるように設定をしていきます。
①config/environments/development.rb 
②config/environments/production.rb
①、②に下記のを追加してください。


Rails.application.configure do
  config.action_mailer.raise_delivery_errors = true  #falseからtrueに変更
 #中略#
  config.action_mailer.delivery_method = :smtp 
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    domain: 'smtp.gmail.com',
    port: 587,
    user_name: Rails.application.credentials.gmail[:user_name],
    password: Rails.application.credentials.gmail[:password],
    authentication: 'login',
    enable_starttls_auto: true
  }
end

##③メーラー作成

メール送信におけるコントローラー的役割を果たすものです。

メーラーの名前はSampleMailerとします。

$ rails g mailer SampleMailer

実行すると、app/mailers以下に次の2つのメーラーが作成されます。

①application_mailer 「全体のメーラーの設定」
②sample_mailer   「先ほど作成したSampleMailerという個別のメーラーの設定」

##③メーラーの編集
①application_mailer 「全体のメーラーの設定」

app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  default from:     "Yamada Taro",  #差出人の名前
          reply_to: Rails.application.credentials.gmail[:user_name] #差出人のメールアドレス
  layout 'mailer'
end

②sample_mailer   「個別のメーラーの設定」

app/mailers/sample_mailer.rb
class PostMailer < ApplicationMailer
  default from: "Yamada Taro"
  def published_email(user)
    @user = user
    mail to: user.email  #新規登録されたメールアドレス
  end
end

##④メールの本文作成

メールの本文はapp/views/sample_mailerの配下に作ります。
メールの本文は、「HTMLバージョン」、「テキストバージョン」の2タイプがあります。

今回は、これを作成します。
①published_email.html.erb 「HTMLバージョン」
②published_email.tex.erb  「テキストバージョン」

app/views/sample_mailer/published_email.html.erb
<!doctype html>
<html lang="ja">
<head>
  <meta content="text/html; charset=UTF-8" />
</head>
<body>
  <h2><%= @user.name %></h2>
  <hr />
  <p>
    こんにちは! <%= @user.name %>さん!</p>
  <hr />
</body>
</html>
app/views/sample_mailer/published_email.text.erb
===============================
<%= @user.name %>様
===============================
 
こんにちは! <%= @user.name %>さん

##⑥コントローラーの編集

コントローラーの「createメゾット」に一行追加してください。

app/controllers/users_controller.rb
class UsersController < ApplicationController
    #中略 
  def create
    @user = User.new(user_params)
  
    respond_to do |format|
      if @user.save
        SampleMailer.published_email(@user).deliver #こちらを追加する。
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end
   #中略 
end

##⑥ルーティングの編集
最後にルーティングの設定したら完了です。

config/routes.rb

Rails.application.routes.draw do
  resources :users
  root "users#index"  #こちらを追加する。
end

##最後に起動させて確認して見ましょう!

$ rails s

このように画面が出てきます!
実際に操作して確認して見て下さい。

名前とメールアドレスを登録するとメールが自動送信されます。
9.png

以上実装は終了です。
ご視聴頂きありがとうございました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?