LoginSignup
17
19

More than 3 years have passed since last update.

[Ruby/Rails]メール送信機能の実装方法(Gmail)

Last updated at Posted at 2018-01-20

メール送信機能の実装方法

スクリーンショット 2018-01-20 19.57.53.png

共有すること

Ruby/Railsによるメールを送信機能の実装方法
(今回はGmailを利用します。)

開発環境

Ruby 2.4.1
Rails 5.1.4

前提条件

この記事で紹介している方法でメール送信機能を実装する場合は、下記の条件(1.〜3.)を満たしている必要があります。

1. Googleのアカウントを作成していること

2. 2段階認証を[有効]にしていること

3. アプリパスワードを発行していること

上記2.および3.は下記アドレスより確認してください。

Google > 「ログインとセキュリティ」 > 「Googleへのログイン」
https://myaccount.google.com/security#signin

スクリーンショット 2018-01-20 19.17.38.png

Rubyでメール送信機能を実装する方法

ポイント

require "mails" を利用

補足

下記 コード例 において

YOUR_GMAIL_ADDRESSには、Gmailのアドレス
GOOGLE_APP_PASSWORDには、アプリパスワード

をそれぞれ代入してください。

コード例

mail.rb
require "mail"

mail = Mail.new do
    from "sample@gmail.com" ##送信元メールアドレス
    to "sample+reciever@gmail.com" ##送信先メールアドレス
    subject "Sample Mail from Ruby on Rails" ##メール件名
    body "This is sample page." ##メール本文
end

mail.delivery_method :smtp, { address:   'smtp.gmail.com',
    port:      587,
    domain:    'gmail.com',
    user_name: YOUR_GMAIL_ADDRESS,
    password:  GOOGLE_APP_PASSWORD}

mail.deliver

捕捉

Gmailではsample+reciever@gmail.comのように、
+を利用することで複数の受信用アドレスを持つことが可能(メールエイリアス機能)。

実行結果

下記コマンドを入力して、コードを実行

command
$ cd (directory having mail.rb)
$ ruby mail.rb

Gmailを開き、メールが送信できているか確認

スクリーンショット 2018-01-20 19.48.06.png

上記のように、メールが届いています。

Railsでメール送信機能を実装する方法

ポイント

Railsの1機能であるMailerを利用する

実装方法

ここでは、Railsアプリmailerにメール送信機能を実装していく。

1. scaffoldで、モデル・ビュー・コントローラを実装

command
$ rails new mailer
$ cd mailer
$ rails g scaffold User name:string email:string

2. コマンドでUserMailerを実装

command
$ rails g mailer UserMailer send_mail

3. UserMailerを編集

app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer

  def send_mail(user)
    @user = user
    mail to: user.email, subject:"Sample from Rails"
  end
end

4. users_controllerを編集

ここでは、新しくユーザー情報が登録されたらメールを送信するようにする。

createアクションにUserMailer.send_mail(@user).deliver_nowを追加

app/controllers/users_controller.rb
class UsersController < ApplicationController

#...省略...

  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save

        ##追加したコード
        UserMailer.send_mail(@user).deliver_now

        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

5. メール本文を作成

command
mailer $ cd app/views/user_mailer
user_mailer cd touch send_mail.html.erb send_mail.txt.erb
app/views/user_mailer/send_mail.html.erb
<h1>Dear <%= @user.name %></h1>

<p>
  Thank you to join our app.
</p>
app/views/user_mailer/send_mail.txt.erb
Dear <%= @user.name %>
Thank you to join our app.

6. app/enviroments/development.rb を編集

development.rb
Rails.application.configure do

# ..省略..

  config.action_mailer.raise_delivery_errors = true
  #デフォルトではfalseになっている

  config.action_mailer.delivery_method = :smtp

  config.action_mailer.smtp_settings = {
      port: 587,
      address: 'smtp.gmail.com',
      domain: 'smtp.gmail.com',
      user_name: YOUR_GMAIL_ADDRESS,
      password: GOOGLE_APP_PASSWORD,
      enable_starttls_auto: true
  }

# ..省略..

実行結果

下記コマンドを入力して、プログラミングを実行

command
$ cd mailer
$ rails s

下記アドレスにアクセス

Nameに名前を、Emailにメールアドレスを入力 & [Create User]をクリック

スクリーンショット 2018-01-20 20.42.55.png

Gmailを確認

下記のように、メールが届いていることがわかる。

スクリーンショット 2018-01-20 20.50.27.png

参考資料

Ruby on Rails チュートリアル 第11章

17
19
1

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
17
19