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)
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以预览对我的欢迎电子邮件模板的更改.
我很惊讶没有人提到letter_opener。它是一个 gem,每当在开发中发送电子邮件时,它就会将电子邮件作为浏览器页面呈现和打开。
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
Run Code Online (Sandbox Code Playgroud)
在http://localhost:3000/rails/mailers/custom_mailer预览所有电子邮件
| 归档时间: |
|
| 查看次数: |
48922 次 |
| 最近记录: |