2

我想在邮件 erb 模板中用作正文。当我在 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 %>
4

1 回答 1

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

可以看到这里的 email 属性是由一个 Hash 指定的。当切换到使用 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
于 2013-04-15T19:24:10.057 回答