メールを送ることができる機能で、パスワードリセットや定時のユーザーへの連絡などに使える。
生成の仕方は rails g mailer (model名)Mailer
4009_Ryosuke-nakagawa_runteq_curriculum_advanced % rails g mailer ArticleMailer
create app/mailers/article_mailer.rb
create app/mailers/application_mailer.rb
invoke slim
create app/views/article_mailer
create app/views/layouts/mailer.text.slim
create app/views/layouts/mailer.html.slim
invoke rspec
create spec/mailers/article_mailer_spec.rb
create spec/mailers/previews/article_mailer_preview.rb
勝手にモデル名に合わせたmailerとview,testを作成してくれる
mailerはcontrollerと似ていて、baseになるApplicationMailerと空の(モデル名)Mailerとが生成される。
# app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: "[email protected]"
layout 'mailer'
end
# app/mailers/article_mailer.rb
class ArticleMailer < ApplicationMailer
end
例えば、挨拶メールをユーザーに送るとすると、このようにメソッドを定義する。
# app/mailers/article_mailer.rb
class ArticleMailer < ApplicationMailer
default from: '[email protected]'
#<=送り主のアドレスを指定。(各メソッドでメールごとに上書きすることも可能)
def greeting_email
@user = params[:user]
@url = '<http://example.com/login>' #<=メール本文で使用可能
mail(to: @user.email, subject: 'おはようございます') #<=userのemailを宛先に格納
end
end
app/views/article_mailer/
ディレクトリでgreeting_email.html.erb
というファイルを作成。このファイルを、HTMLでフォーマットされたメールテンプレートにする。
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1><%= @user.name%>様、おはようございます。</h1>
<p>
本日も良い日でありますように。
もしよろしければサイトにも訪れてみてください。<br>
</p>
<p>
このサイトにログインするには、<%= @url%>をクリックしてください。
</p>
</body>
</html>
ユーザーによってはHTMLフォーマットのメールを受け取りたくない人もいるので、テキストメールも作成しておいた方が良い。
作るにはapp/views/user_mailer/
ディレクトリでgreeting_email.text.erb
というファイルを以下の内容で作成する。
**<%=** @user.**name** **%>**様、おはようございます===============================================
本日も良い日でありますように。
よろしければサイトにも訪れてみてください。
このサイトにログインするには、<%= @url%>をクリックしてください。
現在のAction Mailerでは、mail
メソッドを呼び出すと2種類のテンプレート (テキストおよびHTML) があるかどうかを探し、multipart/alternative
形式のメールを自動生成する。