如何在Mail gem中使用body erb模板?

时间:2013-04-15 15:40:32

标签: ruby email pony

我想在Mail erb模板中用作body。当我在Pony gem上设置它时,它可以工作。

post 'test_mailer' do
  Mail.deliver do
    to ['test1@me.com', 'test2@me.com']
    from 'you@you.com'
    subject 'testing'
    body erb(:test_mailer) # this isn't working
  end
end

private

fields = [1, 2] # some array

ERB档案

<% fields.each do |f| %>
  <%= f %>
<% end %>

1 个答案:

答案 0 :(得分:5)

假设您使用Pony的原始Sinatra路线看起来像这样:

post 'test_mailer' do
  Pony.mail :to => ['test1@me.com', 'test2@me.com'],
            :from => 'you@you.com',
            :subject => 'testing',
            :body => erb(:test_mailer)
end

您可以看到此处的电子邮件属性由哈希指定。当切换到使用Mail gem时,它的属性由在特定上下文中调用的块定义,以便这些特殊方法可用。

我认为问题可能与在块内调用erb有关。以下是您可以尝试的一些事项:

尝试以可以传递到块中的方式生成ERB:

post 'test_mailer' do
  email_body = erb :test_mailer, locals: {fields: fields}
  Mail.deliver do
    to ['test1@me.com', 'test2@me.com']
    from 'you@you.com'
    subject 'testing'
    body email_body
  end
end

或者全局调用ERB而不是使用sinatra帮助器:

post 'test_mailer' do
  context = binding
  Mail.deliver do
    to ['test1@me.com', 'test2@me.com']
    from 'you@you.com'
    subject 'testing'
    body ERB.new(File.read('views/test_mailer.erb')).result(context)
  end
end