回答:
Action Mailerには、Rails 4.1で電子メールをプレビューするための組み込みの方法があります。たとえば、これをチェックしてください:
# located in test/mailers/previews/notifier_mailer_preview.rb
class NotifierPreview < ActionMailer::Preview
# Accessible from http://localhost:3000/rails/mailers/notifier/welcome
def welcome
Notifier.welcome(User.first)
end
end
spec/mailers/previews
ダニエルの答えは良い出発点ですが、メールテンプレートに動的データが含まれている場合、それは機能しません。たとえば、電子メールが注文の領収書であり、その中に印刷するとします。@order.total_price
前の方法を使用すると、@order
変数はnilになります。
ここに私が使用する小さなレシピがあります:
まず、このメールプレビュー機能は間違いなく内部使用のみであるため、いくつかの一般的なルートを管理名前空間に設定しました。
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
次に、コントローラーを作成します。このコントローラーでは、メールテンプレートごとに1つのメソッドを作成します。ほとんどのメールには動的なデータが含まれているため、テンプレートが想定するすべてのメンバー変数を設定する必要があります。
これはフィクスチャを使用して実行できますが、私は通常、いくつかの疑似ランダムな実際のデータを取得することを好みます。覚えておいてください-これは単体テストではありません-これは純粋に開発援助です。毎回同じ結果を生成する必要はありません-実際-そうでない場合はおそらくより良いです!
#app/controllers/admin/mailer_controller.rb
class Admin::MailerController < Admin::ApplicationController
def preview_welcome()
@user = User.last
render :file => 'mailer/welcome.html.erb', :layout => 'mailer'
end
end
テンプレートをレンダリングするときは、を使用することに注意してくださいlayout=>:mailer
。これにより、通常のWebアプリケーションレイアウト(などapplication.html.erb
)内ではなく、作成したHTMLメールレイアウト内にメールの本文が埋め込まれます。
そして、それだけです。これで、http://example.com/admin/mailer/preview_welcomeにアクセスして、ウェルカムメールテンプレートの変更をプレビューできます。
get 'mailer...
代わりになりましたmatch
。
37signalsのはとも呼ばれる、独自のメールテストの宝石があるmail_viewを。それはかなり素晴らしいです。
私が見た中で最も簡単なセットアップはMailCatcherです。セットアップには2分かかりましたが、そのままの状態で新しいメーラーで動作します。
私はemail_previewを使用しています。試してみる。
Rails Email Previewを使用できます
REPは、I18nサポート、簡単なプリメーラーの統合、およびcomfortable_mexican_sofaを使用したオプションのCMS編集で、送信メールをプレビューおよびテストするためのRailsエンジンです。
rails
を使用すると、メールプレビューが生成されますrails g mailer CustomMailer
。あなたはCustomMailerPreview
中にファイルを取得しますspec/mailers/previews
フォルダます。
ここで、メーラーを呼び出すメソッドを記述して、プレビューを生成します。
元-
class CustomMailerPreview < ActionMailer::Preview
def contact_us_mail_preview
CustomMailer.my_mail(user: User.first)
end
end
すべてのメールをhttp:// localhost:3000 / rails / mailers / custom_mailerでプレビューします
config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews"
Rails Email Previewを使用すると、開発モードのWebブラウザーで電子メールをすばやく表示できます。
1)“gem ‘rails_email_preview’, ‘~> 0.2.29’ “
gemファイルに追加し、バンドルをインストールします。
2)実行 “rails g rails_email_preview:install”
これをすると、configフォルダーに初期化子が作成され、ルートが追加されます。
3)“rails g rails_email_preview:update_previews”
アプリディレクトリのこのクレートmailer_previewsフォルダーを実行します。
ジェネレータは各メールにスタブを追加し、スタブにモックデータを入力します。
例:
class UserMailerPreview
def invitation
UserMailer.invitation mock_user(‘Alice’), mock_user(‘Bob’)
end
def welcome
UserMailer.welcome mock_user
end
private
def mock_user(name = ‘Bill Gates’)
fake_id User.new(name: name, email: “user#{rand 100}@test.com”)
end
def fake_id(obj)
obj.define_singleton_method(:id) { 123 + rand(100) }
obj
end
end
4)検索クエリのパラメーターは、クラスをプレビューするためのインスタンス変数として使用できます。例:“/emails/user_mailer_preview-welcome?user_id=1”
@user_id
Welcomeメソッドで定義されているようなURLがある場合
UserMailerPreview
、特定のユーザーにメールを送信するのに役立ちます。
class UserMailerPreview
def welcome
user = @user_id ? User.find(@user_id) : mock_user
UserMailer.welcome(user)
end
end
5)このようなREP URLにアクセスするには
rails_email_preview.rep_root_url
rails_email_preview.rep_emails_url
rails_email_preview.rep_email_url(‘user_mailer-welcome’)
6)REP経由でメールを送信できます。これは環境メーラー設定を使用します。イニシャライザのこの行のコメントを外して、テスト環境でのメール送信を無効にします。
config.enable_send_email = false
ソース:RailsCarmaブログ:Mail_View Gemを使用したRailsアプリケーションでのメールのプレビュー
誰も言及していないletter_openerに驚いています。これは、メールが開発者に配信されるたびに、メールをブラウザーページとしてレンダリングして開く宝石です。
メーラーから直接プレビューする方法はありません。しかし、あなたが書いたように、あなたはこのようなものに見えるコントローラーを書くことができます。
class EmailPreviewsControllers < ActionController::Base
def show
render "#{params[:mailer]}_mailer/#{params[:method]}"
end
end
しかし、メールが正しく見える場合、それがメールをテストする最良の方法ではないと思います。
render "#{params[:mailer]}_mailer/#{params[:method]}", :layout => 'mailer'
アプリ用に作成したHTMLメールレイアウト内にメールの本文を埋め込みます。
私はmails_viewer gem を好みます。この宝石は、HTMLテンプレートをtmpフォルダーに保存するので非常に便利です。