#経緯
最近,webサービスを開発しました.
今回は,ログインの部分でメールを使う必要があったのでMailerの勉強をしようと思った次第です.
基本的には,Railsガイドを読み進めてまとめているだけです.
始めて半年も経っていないので至らない点があると思います.その時はコメントでご指摘して頂ければ幸いです.
(注:文章作成が下手なので読み難いときはアドバイスをくださると助かります.)
#1.はじめに
Action Mailerは,コントロールと似た動作でメール送信ができるものです.
Rails内ではアプリケーションのメイラークラスやビューで送信を構成できます.
#2.メールの送信をする
###2.1.メイラーを作成する
ここでは,実際にメイラーとビューの作成を行なっているので順を追ってやっていきます.
bin/rails generate mailer UserMailer
identical app/mailers/user_mailer.rb
invoke erb
exist app/views/user_mailer
invoke test_unit
identical test/mailers/user_mailer_test.rb
identical test/mailers/previews/user_mailer_preview.rb
これで,メイラーとビューの作成ができました.generate
を使いたくない場合は,app/mailers
ディレクトリ以下に自身でファイルを作成し,ActionMailer::Base
を継承すればできます.
class MyMailer < ActionMailer::Base
end
###2.2.メイラーを編集する
前述したように,メイラーはコントローラによく似ているのでアクションとメールの設定をするためのビューがあります.
先程のgenerate
により,app/mailers/user_mailer.rb
に空のメイラーがあります.
class UserMailer < ApplicationMailer
end
ここをいじればユーザーが登録したメールアドレスにメールを送信することができます.それでは,実際にいじくってみます.
class UserMailer < ApplicationMailer
defalut from: '自分のメールアドレス'
def Regist_email
@user = params[:user]
@url = '自身のサイトのURL'
mail(to: @user.email,subject:'サイトに登録していただきありがとうございます.')
end
end
中身を上から説明していきます.
defalut:
全てのメイラーからメールを送信するときに使うアドレスを設定するものです. :form
は送信元のメールアドレスを設定しています.因みに,この値は上書きもできます.
@user,と@urlは,インスタンス変数なので自身の開発にあったものを書いてください.
mail:
実際のメールの内容を入れる場所です.subject
は,本文を入れることができます.詳しいことは,Rails6.0.0の公式ライブラリから確認してみてください.
###2.3 メイラービューを作成する
app/views/user_mailer/
内にhtml.erbファイルを作成します.このHTMLを,メールテンプレートにします.
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1><%= @user.name %>様、example.comへようこそ。</h1>
<p>
example.comへのサインアップが成功しました。
your username is: <%= @user.login %>.<br>
</p>
<p>
このサイトにログインするには、<%= @url %>をクリックしてください。
</p>
<p>ご入会ありがとうございます。どうぞお楽しみくださいませ。</p>
</body>
</html>
ユーザーによっては,HTMLフォーマットを受け取りたくない場合もあるそうなので,テキストメールも作っておきます.こちらは,同じディレクト内にtext.erbファイルを作成します.
<%= @user.name %>様、example.comへようこそ。
===============================================
example.comへのサインアップが成功しました。ユーザー名は「<%= @user.login %>」です。
このサイトにログインするには、<%= @url %>をクリックしてください。
本サイトにユーザー登録いただきありがとうございます。
今のAction Mailerだとmultipart/alternative形式(html,testどちらでも表示する形式)でメールを自動生成します.
###2.4 メイラーを呼び出す
Action MailerはActive Job(バックグエンドでメール配信を行うフレームワーク)とうまく統合されているようなので,Webのリクエスト/レスポンスサイクルの外で非同期にメールを送信できます.
class UsersController < ApplicationController
UserMailer.with(user: @user).welcome_email.deliver_later
end
ここでのwith
とdeliver_laterは,インスタンスメソッドでありこれもRails6.0.0の公式ライブラリに記載されています.
それでは,それぞれの説明をします.
with:
インスタンスメソッドとコールバックで使用するためにパラメータを提供するもの.
deliver_later:
Active jobを通して,電子メールをキューに入れるもの.使用時は,メソッドのdeliver_now
を使ってメール送信が行われる.
これでUserMailerを呼び出し,welcome_email.html.erb
や,welcome_email.test.erb
を送信することができます.
#終わりに
今回は,Mailerの基本的な部分をみてきました.メールを用いたログインの機能になるともう少し知識が必要な気もしますが…
まあ,その部分は実際に開発をしてみてから投稿したいと思います.
最後まで読んでいただきありがとうございました.
#引用
Railsガイド Action Mailerの基礎
https://railsguides.jp/action_mailer_basics.html#%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B
Ruby on Rails6.0.0の公式ライブラリ
https://api.rubyonrails.org/