如何在Rails中预览电子邮件?

这可能是一个愚蠢的问题,但是当我在Rails中放入一个HTML电子邮件时,是否有一个特别简单的内置方式来预览浏览器中的模板,还是我需要编写某种自定义控制器来拉它在它看来?

行动邮件程序现在有一个内置的方式在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 

丹尼尔的回答是一个好的开始,但如果你的电子邮件模板包含任何dynamic数据,它将无法正常工作。 例如,假设您的电子邮件是一个订单收据,并在其中打印@order.total_price – 使用以前的方法@ordervariables将为零。

这是我使用的一个小配方:

首先,由于这个电子邮件预览function绝对仅供内部使用,因此我在admin命名空间中设置了一些通用路由:

 #routes.rb MySite::Application.routes.draw do namespace :admin do match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action' end end 

接下来,我创build控制器。 在此控制器中,我为每个电子邮件模板创build一个方法。 由于大多数电子邮件都包含dynamic数据,因此我们需要填充模板所需的任何成员variables。

这可以用灯具来完成,但我通常喜欢只抓取一些伪随机的实际数据。 请记住 – 这不是一个unit testing – 这完全是一个发展援助。 它不需要每一次都产生相同的结果 – 事实上,如果不是这样,它可能会更好!

 #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 。 这将您的电子邮件内容embedded到您创build的HTML电子邮件布局中,而不是在典型的Web应用程序布局(例如application.html.erb )中。

而这是非常多的。 现在,我可以访问http://example.com/admin/mailer/preview_welcome预览更改为我的欢迎电子邮件模板。;

37Signals也有自己的邮件testinggem,叫做mail_view 。 这太棒了。

我见过的最简单的设置是MailCatcher 。 安装程序花了2分钟时间,它适用于开箱即用的新邮件。

我使用email_preview 。 试一试。

我最近写了一个名为Maily的gem来预览,编辑(模板文件)并通过浏览器发送应用程序的电子邮件。 它还提供了一个友好的方式来挂钩数据,一个灵活的授权系统和一个简约的用户界面。

我计划在不久的将来添加新function,如:

  • 每个电子邮件多个挂钩
  • 通过UI参数化邮件(邮件方法的参数)
  • 玩翻译键(列表,突出显示,…)

我希望它可以帮助你。

您可以使用Rails电子邮件预览

rails-email-preview截图

REP是一个用于预览和testing发送电子邮件的rails引擎,支持I18n,简单的premailer集成以及可选的使用comfortable_mexican_sofa进行 CMS编辑。

Rails电子邮件预览可帮助我们以开发模式快速查看Web浏览器中的电子邮件。

1)添加“gem 'rails_email_preview', '~> 0.2.29' “到gem文件和bundle安装。

2)运行“rails g rails_email_preview:install”这将在config文件夹中创build初始化程序并添加路由。

3)运行“rails g rails_email_preview:update_previews”在应用程序目录中创buildmailer_previews文件夹。

Generator将为每个电子邮件添加一个存根,然后用模拟数据填充该存根。

例如:

 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)search查询中的参数将作为实例variables提供以预览课程。 例如:如果我们有一个类似“/emails/user_mailer_preview-welcome?user_id=1” @user_id “/emails/user_mailer_preview-welcome?user_id=1”UserMailerPreview welcome方法中定义,这有助于我们发送邮件给特定的用户。

 class UserMailerPreview def welcome user = @user_id ? User.find(@user_id) : mock_user UserMailer.welcome(user) end end 

5)像这样访问REPurl

 rails_email_preview.rep_root_url rails_email_preview.rep_emails_url rails_email_preview.rep_email_url('user_mailer-welcome') 

6)我们可以通过REP发送邮件,这将使用环境邮件设置。 在初始化程序中取消注释此行以禁止在testing环境中发送邮件。

 config.enable_send_email = false 

来源: RailsCarma博客:使用Mail_View Gem在Rails应用程序中预览电子邮件

没有办法直接从Mailer中预览它。 但是,如你所写,你可以写一个控制器,看起来像这样。

 class EmailPreviewsControllers < ActionController::Base def show render "#{params[:mailer]}_mailer/#{params[:method]}" end end 

但我认为,如果testing的电子邮件正确,这不是testing电子邮件的最佳方法。

我更喜欢mails_viewergem。 这个gem是非常有用的,因为它将HTML模板保存到tmp文件夹中。

我很惊讶没有人提到letter_opener 。 这是一个gem,只要电子邮件在dev中提供,就会呈现并打开电子邮件作为浏览器页面。

如果使用rails g mailer CustomMailerrails生成邮件预览。 您将在spec/mailers/previews文件夹中获得CustomMailerPreview文件。

在这里,您可以编写将调用邮件程序的方法,并生成预览。

对于前 –

 class CustomMailerPreview < ActionMailer::Preview def contact_us_mail_preview CustomMailer.my_mail(user: User.first) end end 

在http:// localhost:3000 / rails / mailers / custom_mailer预览所有电子邮件