##基本
$ rails g mailer SampleMailer hoge
メーラーとViewファイル×2(HTML版とプレーンテキスト版)が生成されます。
class SampleMailer < ApplicationMailer
def hoge
@greeting = "Hi"
mail to: "to@example.org"
end
end
<h1>Sample#hoge</h1>
<p>
<%= @greeting %>, find me in app/views/sample_mailer/hoge.html.erb
</p>
Sample#hoge
<%= @greeting %>, find me in app/views/sample_mailer/hoge.text.erb
あとはControllerの任意の箇所でSampleMailer.hoge.deliver_now
と記述することで、ローカル環境でメールを送信することができます。
送信されるメールの内容は、サーバーのログから確認できます。
##よくあるカスタマイズ
メールの文面は、Viewファイルを修正することで自由に変更できます。
またMailerのアクションに引数をとって、引数からメールの送信先や本文に埋め込むテキストを抽出することが多いです。
class SampleMailer < ApplicationMailer
def hoge(user)
@user = user
mail to: user.email, subject: 'Hello World!'
end
end
<p>こんにちは<%= @user.name %>さん!</p>
こんにちは<%= @user.name %>さん!
class FooBarController < ApplicationController
def foobar
@user = find(params[:id)
SampleMailer.hoge(@user).deliver_now
end
end
##メールのプレビュー
冒頭の$ rails g mailer SampleMailer hoge
を叩いた時に、以下のファイルが自動生成されます。
# Preview all emails at http://localhost:3000/rails/mailers/sample_mailer
class SampleMailerPreview < ActionMailer::Preview
# Preview this email at http://localhost:3000/rails/mailers/sample_mailer/hoge
def hoge
SampleMailer.hoge
end
end
コメントアウトに記載されているhttp://localhost:3000/rails/mailers/sample_mailer/hoge
等のアドレスにアクセスすることで、メールのプレビューを確認することができます。
メーラーに引数が必要な場合には、プレビューファイル内で定義ましょう。
# Preview all emails at http://localhost:3000/rails/mailers/sample_mailer
class SampleMailerPreview < ActionMailer::Preview
# Preview this email at http://localhost:3000/rails/mailers/sample_mailer/hoge
def hoge
user = User.first
SampleMailer.hoge(user)
end
end
##TODO
本番環境(特にHeroku)でのメール送信
https://railstutorial.jp/chapters/account_activation?version=5.1#sec-activation_email_in_production