如何在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
– 使用以前的方法@order
variables将为零。
这是我使用的一个小配方:
首先,由于这个电子邮件预览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电子邮件预览
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 CustomMailer
则rails
生成邮件预览。 您将在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预览所有电子邮件