🐈
Action Mailerでメール送信機能を実装
Action Mailerとは?
メール送信機能を実装できる
実装してみる
今回はユーザー登録成功時、入力したメールアドレス宛に登録完了メールを送信する
ユーザー登録機能作成
$ rails g scaffold user name email
$ rails db:migrate
Action Mailer用ファイルを生成
以下を実行すると、app/mailers配下にファイルが生成
またapp/views配下に、メール内容を編集できるHTMLとテキストファイルが生成
$ rails g mailer UserMailer
コントローラーを編集
・メソッドの説明
with
:引数(key: value)でパラメーターを渡す
deliver_now
:同期的
deliver_later
:非同期的(※Sidekiq等の設定が必要)
# users_controller.rb
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
# UserMailerのwelcomメソッドを発火
UserMailer.with(email: @user.email, name: @user.name).welcome.deliver_now
format.html { redirect_to @user, notice: 'ユーザー登録が完了しました。' }
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
private
def user_params
params.require(:user).permit(:name, :email)
end
メイラーを編集
app/mailers配下に生成されたメイラーファイルに、送信用メールアドレス等を設定
# mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: 'rails@example.com' # 送信用メールアドレス
layout 'mailer' # views/layout配下のmailer.(htmlかtext).erbを指定
end
# mailers/user_mailer.rb
class UserMailer < ApplicationMailer
def welcome(email:, name:)
@name = name
# mailメソッドで、HTMLとテキストファイルがあるか探す
mail(to: email, subject: '登録完了')
end
end
views/user_mailer配下のHTMLとテキストファイルに、送信する内容を編集
<p> <%= @name %> 様</p>
<p> ユーザー登録が完了しました。</p>
開発環境でメールが送信されるか確認
開発環境で送信したメールを確認できるletter_opener_web
をbundle install
# Gemfile
group :development do
gem 'letter_opener_web'
end
# routes.rb
Rails.application.routes.draw do
mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
# 省略
end
# config/environments/development.rb
Rails.application.configure do
# 省略
config.action_mailer.delivery_method = :letter_opener_web
end
ユーザー登録後、http://localhost:3000/letter_opener
にアクセスし、メールが送信されていれば実装完了🎉
参考記事
Discussion