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

Pet*_*xey 113 email ruby-on-rails

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

ben*_*phw 125

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
Run Code Online (Sandbox Code Playgroud)

  • 如果你正在使用Rspec,你的预览会进入`spec/mailers/previews` (7认同)
  • @andres非常确定这是设计 - 您不希望用户在生产服务器上预览您的邮件,它仅适用于本地开发. (4认同)
  • 预览版可在 http://localhost:3000/rails/mailers/notifier/welcome 中找到,其列表位于 http://localhost:3000/rails/mailers 中。 (4认同)
  • @CyrilDD你必须自己构建类似的东西,我不认为这将是这项工作的工具. (2认同)

cai*_*nne 73

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

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

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

#routes.rb

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

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

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

#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
Run Code Online (Sandbox Code Playgroud)

请注意,当我们渲染模板时,我们使用layout=>:mailer.这会将您的电子邮件正文嵌入到您创建的HTML电子邮件布局中,而不是在典型的Web应用程序布局中(例如application.html.erb).

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

  • 路线应该是`get'邮件...`现在而不是`match`. (5认同)

Mar*_*arc 18

37Signals还拥有自己的邮件测试宝石,名为mail_view.这太棒了.


Gal*_*len 16

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


pis*_*ruk 11

我使用email_preview.试试看.


use*_*745 11

Rails 5、Rails 6 和 Rails 7 中最简单的解决方案:只需记住一个 url:

http://localhost:3000/ rails/mailers


Kur*_*ton 9

我很惊讶没有人提到letter_opener。它是一个 gem,每当在开发中发送电子邮件时,它就会将电子邮件作为浏览器页面呈现和打开。

  • letter_opener 是一个很酷的宝石,它是必备的。但有时邮件会从您想要避免播放的特殊事件开始,以纯粹检查邮件的 html/css。 (4认同)

mar*_*ets 5

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

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

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

我希望它可以帮到你.


Swa*_*aps 5

rails如果您使用rails g mailer CustomMailer. 你会得到一个文件CustomMailerPreviewspec/mailers/previews的文件夹。

在这里你可以编写你的方法来调用邮件程序,它会生成一个预览。

对于前 -

class CustomMailerPreview < ActionMailer::Preview
  def contact_us_mail_preview
    CustomMailer.my_mail(user: User.first)
  end
end
Run Code Online (Sandbox Code Playgroud)

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