ActionMailerを使用
ActionMailerとは
railsにデフォルトで備わっているメール送信機能です。
app/mailers配下にメール送信用のメソッドが作成され、
app/views/メーラー名配下にメールの文言ファイルが作成されます。
通常のテキストメール送信に加え、HTMLメールが送信できたり、
添付ファイルをつけたりと、様々なオプションを取ることができます。
使用方法
まずメイラーを作成していきます。
メイラーを作成するとコントローラと同様、ビューとテストファイルも自動で生成されます。
$ rails generate mailer UserMailer welcome_email
メイラーを編集していきます。
(app/mailers/user_mailer.rb) class UserMailer < ApplicationMailer default from: 'user@example.com' # ① def welcome_email # ② @user = params[:user] @url = 'hoge_path' mail(to: user.email, subject: 'welcome') # ③ end end
①共通の処理・設定を記述する場合にはdefaultメソッドを使用します。
ここで使っているfrom:はメールの送信元名です。
この値はメールごとに上書きすることも可能です。
②コントローラと同様、メソッドを定義することができます。
メイラーのメソッド内で定義されたすべてのインスタンス変数はそのままビューで使えます。
③mailメソッド。実際のメールに使うメッセージです。
ここでは:to(宛先)と:subject(件名)を渡しています。
mailメソッドでは通常のメールと同じように
cc、bccなどのメールの送信先アドレスを指定可能です。
メイラービューを作成します。
まずHTMLでフォーマットされたメールテンプレートにします。
(app/views/user_mailer/welcome_email.html.erb) <h1><%= @user.name %>様</h1> <p><%= @url %>をクリックしてください。</p> <p>ご入会ありがとうございます。</p>
次に同じ内容のテキストメールも作成します。
(app/views/user_mailer/welcome_email.text.erb) <%= @user.name %>様 =============================================== <%= @url %>をクリックしてください。 ご入会ありがとうございます。
※ HTMLメールとテキストメールの違い
HTMLメールではWebページのように文字のフォントや色、
大きさを変えることができるだけでなく、画像や動画を入れることもできます。
テキストメールはテキスト形式で作成されたメールのことです。
メールの設定を記述しただけではメールは送信できません。
メイラーは各コントローラのアクションからの呼び出しによって起動します。
letter_opener_webのgemを使用
letter_opener_webというメールの確認を開発環境、テスト環境で行うためのgemをGemfileに追加してbundle install
を行います。
group :development, :test do gem 'letter_opener_web' end
開発環境でこの機能を使いたい時はconfig/environments/development.rb
に以下のコードを追加します。
config.action_mailer.default_url_options = { host: 'localhost:3000' } config.action_mailer.delivery_method = :letter_opener_web
そしてroutes.rb
ファイルにletter_opener_webにアクセスするためのURLを追加します。
if Rails.env.development? mount LetterOpenerWeb::Engine, at: "/letter_opener" end
ここまでの設定をして、Localhost:3000/letter_opener
にアクセスすると送信されたメールを確認することが出来るようになります。