我的软件为用户发送电子邮件。我想向他们展示电子邮件在发送之前的样子。但是,使用 ActionMailer 约定,整个模板都在一个文件中。这意味着 html、head、body 标签等。谁能想到一个好方法让我的用户预览我发送的电子邮件的外观?
谢谢!
我的软件为用户发送电子邮件。我想向他们展示电子邮件在发送之前的样子。但是,使用 ActionMailer 约定,整个模板都在一个文件中。这意味着 html、head、body 标签等。谁能想到一个好方法让我的用户预览我发送的电子邮件的外观?
谢谢!
我遇到过同样的问题。我用我发送的相关模型而不是在邮件中构建了显示。我能够提供样本数据或实时数据以将其显示给用户。当需要实际发送它时,我在邮件视图中呈现了完全相同的内容
编辑:我提前为垃圾变量名称道歉。我不确定我是否可以明确地谈论它们:)
假设我有一个名为 foo(status,bar) 的 BarMailer 函数,其中 status 是测试电子邮件或实时电子邮件,而 bar 是我的关联模型。
我打电话给 Deliver_foo("test",bar)
deliver_foo 发送一个多部分消息,因此对于每个部分,我 render_message 并传递我需要的变量。例如:
p.body = render_message('bar_html', :bar => bar, :other_data => bar.other_data)
所以,render_message 是说专门使用 bar_html 视图(我也有一个 bar_text 用于纯文本)。
这是我的 bar_html 视图的内容:
<%=render :inline => @bar.some_parent.some_other_model.html, :locals => {:other_data => @other_data, :time => Time.now, :bar => @bar }%>
它有点复杂,但它是基于模板系统的。通过到处渲染内联,我可以将相同的代码用于许多不同的功能,包括预览和发送。我喜欢这个,因为它变成了所见即所得。没有额外的代码或功能可能与电子邮件中的潜在输出存在错误和混乱。如果它适用于一个领域,它就会适用于另一个领域。加上保持干燥意味着我不会忘记修改副本(我会经常这样做,呵呵)。