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

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


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

```
$ rails new sample
```

ディレクトリを移動。

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

```
$ rails g scaffold User name email
```

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

```
$ rails db:migrate
```

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

```ruby

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　「全体のメーラーの設定」

```ruby: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　　 「個別のメーラーの設定」

```ruby: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　 「テキストバージョン」

```html: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>
```

```html:app/views/sample_mailer/published_email.text.erb
===============================
<%= @user.name %>様
===============================
 
こんにちは！ <%= @user.name %>さん
```

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

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

```ruby: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
```

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

```ruby:config/routes.rb

Rails.application.routes.draw do
  resources :users
  root "users#index"  #こちらを追加する。
end
```
##最後に起動させて確認して見ましょう！

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

<img width="300" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666273/59aff141-45a3-d59f-c572-d5f9bde71022.png>


名前とメールアドレスを登録するとメールが自動送信されます。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666273/7e7d2976-5ef8-c199-a20f-54109331c879.png)

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