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

时间:2011-08-23 17:25:05

标签: ruby-on-rails email

这可能是一个愚蠢的问题,但是当我在Rails中整理HTML电子邮件时,是否有一种特别简单的内置方式可以在浏览器中预览模板,或者我是否需要编写某种自定义控制器它把它拉进去了吗?

13 个答案:

答案 0 :(得分:119)

Action Mailer现在具有previewing emails in 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

答案 1 :(得分:73)

Daniel的answer是一个好的开始,但如果您的电子邮件模板包含任何动态数据,它将无效。例如。假设您的电子邮件是订单收据,并且在其中打印出@order.total_price - 使用之前的方法,@order变量将为零。

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

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

#routes.rb

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

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

这可以通过灯具来完成,但我通常更喜欢只抓一些伪随机实数据。请记住 - 这不是单元测试 - 这纯粹是一种开发辅助工具。它不需要每次都产生相同的结果 - 实际上 - 如果它没有,它可能会更好!

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

这就是它。现在,我可以访问http://example.com/admin/mailer/preview_welcome预览对我的欢迎电子邮件模板的更改。

答案 2 :(得分:18)

37Signals也拥有自己的邮件测试宝石mail_view。这太棒了。

答案 3 :(得分:16)

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

答案 4 :(得分:11)

我使用email_preview。试一试。

答案 5 :(得分:5)

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

我计划在不久的将来添加新功能,例如:

  • 每封电子邮件多个挂钩
  • 通过UI参与电子邮件(邮件方法的参数)
  • 使用翻译键(列表,突出显示,......)

我希望它可以帮到你。

答案 6 :(得分:4)

您可以使用Rails Email Preview

rails-email-preview screenshot

REP是一个预览和测试发送电子邮件的rails引擎,支持I18n,简单的预编译器集成以及comfortable_mexican_sofa的可选CMS编辑。

答案 7 :(得分:3)

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

1)将“gem ‘rails_email_preview’, ‘~> 0.2.29’ “添加到gem文件并捆绑安装。

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

3)在app目录中运行“rails g rails_email_preview:update_previews”此crates mailer_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)搜索查询中的参数将作为预览类的实例变量提供。例如:如果我们有像这样的网址 “/emails/user_mailer_preview-welcome?user_id=1” @user_idUserMailerPreview的欢迎方法中定义,它可以帮助我们向特定用户发送邮件。

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 Blog : Previewing Emails in Rails Applications With the Mail_View Gem

答案 8 :(得分:3)

我很惊讶没有人提到letter_opener。每当电子邮件在开发中发送时,它都会以电子邮件的形式呈现和打开电子邮件。

答案 9 :(得分:3)

如果您使用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

上的所有电子邮件

答案 10 :(得分:2)

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

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

但我认为,如果它们看起来不正确,那么这不是测试电子邮件的最佳方式。

答案 11 :(得分:1)

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

答案 12 :(得分:0)

rails 6 中最简单的解决方案:只记住一个 url:

http://localhost:3000/rails/mailers

相关问题