6

我想发送通常是视图作为电子邮件正文的内容。

最简单的方法是什么?

例如:我有 pages/reports.html.erb,我想发送您在访问该路径时看到的页面作为电子邮件的正文。

有没有办法获取呈现的 html 并将其分配给电子邮件的 body 变量?

此外,我想将 PDF 版本作为附件包含在内。(我正在使用 wicked_pdf)

def reports
  @email = params[:email]
  #something here?
  respond_to do |format|
    format.html
    format.pdf do
      render :pdf => "usage_report"
    end
  end
end

注意:如果有帮助,我在数据库中使用带有 mongoid 2 的 rails 3.1 和 heroku 上的 sendgrid

编辑:我最终做了什么:

在这里替换#something?和:

email_obj = {}
email_obj.to = params[:email]
email_obj.from = 'reports@company.com'
email_obj.subject = 'Report'
email_obj.body = render_to_string(:template => "pages/reports", :layout => false)
ReportsMailer.deliver_report(email_obj).deliver

并在邮件类 mailers/reports_mailer.rb

class ReportsMailer < ActionMailer::Base
    default from: "from@example.com"
    def deliver_report(email)
        @email = email
        mail( :to => @email.to,
        :subject => @email.subject, 
        :from => @email.from)
    end
end

在reports_mailer/deliver_report.html.erb

<%= render :inline => @email.body %>
4

1 回答 1

3

rails 邮件程序视图按邮件程序的名称存储在视图的子文件夹中,就像控制器视图一样。很难说这是否完全适用于您不知道该方法的视图/控制器是什么样的,但您可以做的是对该页面进行渲染并将其转换为部分,然后您可以在两个控制器视图和邮件程序视图如下:

给出部分:_my_partial.html.erb

在意见范围内:

render "my_partial"

使用部分,您甚至可以传递视图呈现给它所需的任何变量:

render "my_partial", :variable => variable

更新:这可能也很有趣:Rendering a Rails view to string for email

于 2012-12-27T06:37:06.967 回答