6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gmailを用いた ActionMailer の使い方

Last updated at Posted at 2019-10-12

はじめに

ActionMailerの実装は割と簡単にできたのですが、エラーコードが出ずにGmailの設定でかなりの時間を費やしてしまいました。
次にやるときには時間がかけずにすむようにまとめておきたいと思います。

コーディング

コマンド(自動生成)

rails g mailer UserMailer

create  app/mailers/user_mailer.rb
create  app/mailers/application_mailer.rb
invoke  erb
create    app/views/user_mailer
create    app/views/layouts/mailer.text.erb
create    app/views/layouts/mailer.html.erb
invoke  test_unit
create    test/mailers/user_mailer_test.rb
create    test/mailers/previews/user_mailer_preview.rb

Mailer

app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  default from: "from@example.com"
  layout 'mailer'
end
app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
  default from: '~~~@gmail.com'

  # ここのメソッド名をメール文面の view ファイルの名前にする。
  # user と url は呼び出し元の コントローラーのメソッドから渡される。
  def user_create(user, url)
    # @user, @url に値を入れて view に渡す。
    @user = user
    @url = url
    mail(to: "user.name", subject: "ユーザーを新規登録しました。")
  end

Controller

user_controller.rb
class UsersController < ApplicationController

  def index
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)

    if @user.save
      @url = request.url + "/" + @user.id.to_s
      NotificationMailer.user_create(@user, @url).deliver
      redirect_to(user_path(@user))
    else
      render :new
    end
  end

  def show
    @user = User.find(params[:id])
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update(user_params)

      @user = current_user
      @url = request.url
      NotificationMailer.user_update(@user, @url).deliver
      redirect_to(user_path(@user))
    else
      render :new
    end
  end
end

View

メール本文のテンプレートはデフォルトで二種類の形式が提供されています。

views/user_create/user_create.html.erb
<h1>UserMailer#user_create</h1>
<p>
<%= @user %> 様
</p>
<p>
  <%= @url %>, find me in app/views/user_mailer/user_create.html.erb
</p>
views/user_create/user_create.text.erb
UserMailer#user_create
<%= @user %> 様
<%= @url %>, find me in app/views/user_mailer/user_create.text.erb

Gmail googleの設定(重要)

google 二段階認証プロセスの設定
https://myaccount.google.com/signinoptions/two-step-verification/enroll-welcome

google アプリパスワードの作成
https://security.google.com/settings/security/apppasswords

config/initializers/mail.rb
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  # address のところは変更しないので注意。自分はここでハマりました。
  address: 'smtp.gmail.com', 
  domain: 'gmail.com',
  port: 587,
  # user_name は自分のメールアドレスを記載。
  user_name: 'Gmail のメールアドレス',
  # password は作成したアプリパスワードを記載。
  password: 'Gmail のパスワード',
  authentication: 'plain',
  enable_starttls_auto: true
}

まとめ

駆け出しのエンジニアですので、何か不備がありましたらご連絡をお願いします。

参考

https://railsguides.jp/action_mailer_basics.html
https://qiita.com/hirotakasasaki/items/ec2ca5c611ed69b5e85e
https://thr3a.hatenablog.com/entry/20171202/1512175059


会社紹介

株式会社 Mosaica
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。

詳しくは 公式サイト までお気軽にご相談ください。
公式サイト: https://mosaica.co.jp/

6
7
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
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?