Action Mailer
rails g mailer メーラー名
以下が生成される。
Running via Spring preloader in process 61351
create app/mailers/hogehoge.rb
invoke haml
create app/views/hogehoge_mailer
mailers/メーラ名.rb
いわゆるコントローラみたいなもの。
メーラーに対してアクション(?)を定義していく。
class HogeMailer < ApplicationMailer
default from: "hogehoge@example.com"
def fuga(com,ir,user)
@com = com
@user = user
@ir = ir
mail(
subject: "IR from #{com.name}",
to: @user.email
) do |format|
format.text
end
end
end
mailer/アクション名.text.erb
いわゆるviewファイル。通常のviewと同じ感じで書けばOK.
htmlでメールが送れない時に備えて、textファイルとhtmlファイルと用意するのが普通らしい。
/views/hoge_mailer/fuga.text.erb
<%= @user.name %> 様
<%= @com.name %> からIRの発表あり。
<%= @ir.title %>
メールの送信
メーラー.アクション().deliverで順に指定すればOK。
HogeMailer.fuga(com, ir, user).deliver
実際にGmailで送るには
以下の設定を書き込む。
confi/environment/development.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
domain: 'gmail.com',
port: 587,
user_name: 'hogehoge@gmail.com',
password: 'PASSWORD',
authentication: 'plain',
enable_starttls_auto: true
}
letter_opener_web
開発環境で実際にメールを送るのは確認が面倒なため、web上で確認が可能なgemを使うと楽。
gemfileに以下を追記
group :development do
gem "letter_opener_web"
end
config/environments/development.rbに以下を記述。
config.action_mailer.delivery_method = :letter_opener_web
routes.rbに以下を追記。
if Rails.env.development?
mount LetterOpenerWeb::Engine, at: '/letter_opener'
end
letter_opener_webの無効化
confi/environment/development.rb
# config.action_mailer.delivery_method = :letter_opener_web
config/routes.rb
# if Rails.env.development?
# mount LetterOpenerWeb::Engine, at: '/letter_opener'
# end
コメント