メール送信機能の実装方法
共有すること
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
Rubyでメール送信機能を実装する方法
ポイント
require "mails"
を利用
補足
下記 コード例 において
YOUR_GMAIL_ADDRESS
には、Gmailのアドレス
GOOGLE_APP_PASSWORD
には、アプリパスワード
をそれぞれ代入してください。
コード例
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
のように、
+
を利用することで複数の受信用アドレスを持つことが可能(メールエイリアス機能)。
実行結果
下記コマンドを入力して、コードを実行
$ cd (directory having mail.rb)
$ ruby mail.rb
Gmailを開き、メールが送信できているか確認
上記のように、メールが届いています。
Railsでメール送信機能を実装する方法
ポイント
Railsの1機能であるMailer
を利用する
実装方法
ここでは、Railsアプリmailer
にメール送信機能を実装していく。
1. scaffoldで、モデル・ビュー・コントローラを実装
$ rails new mailer
$ cd mailer
$ rails g scaffold User name:string email:string
2. コマンドでUserMailerを実装
$ rails g mailer UserMailer send_mail
3. UserMailerを編集
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
を追加
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. メール本文を作成
mailer $ cd app/views/user_mailer
user_mailer cd touch send_mail.html.erb send_mail.txt.erb
<h1>Dear <%= @user.name %></h1>
<p>
Thank you to join our app.
</p>
Dear <%= @user.name %>
Thank you to join our app.
6. app/enviroments/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
}
# ..省略..
実行結果
下記コマンドを入力して、プログラミングを実行
$ cd mailer
$ rails s
下記アドレスにアクセス
Nameに名前を、Emailにメールアドレスを入力 & [Create User]をクリック
Gmailを確認
下記のように、メールが届いていることがわかる。