在电子邮件虾PDF附件(Prawn pdf attachments in the email)

2019-07-31 09:24发布

在我的Rails应用程序,我想给发票附加到电子邮件:

def invoice(invoice)
  attachment :content_disposition => "attachment",
             :body => InvoicePdf.new(invoice),
             :content_type => "application/pdf",
             :filename => 'invoice.pdf'

  mail(:to => @user.email, :subject => "Your Invoice")
end

InvoicePdf是虾PDF文档:

class InvoicePdf < Prawn::Document
  def initialize(order, view)
    draw_pdf
  end

  def draw_pdf
    # pdf stuff
  end
end

我得到的电子邮件没有附件。 我究竟做错了什么? 任何提示将受到欢迎和赞赏。

编辑:我使用Rails的版本是3.0.x的

Answer 1:

看看在行动梅勒指南 。 你需要调用附件的方法为你添加附件。

试试这个:

attachments['attachment_filename'] = InvoicePdf.new(invoice)

这是假设主叫InvoicePdf.new(发票)生成一个文件,并返回表示该文件中的IO对象。 我还注意到,您的InvoicePdf类初始化需要两个参数,但你逝去的只有一个。

更新:另外请注意,行动梅勒将文件名,并制定MIME类型,设置内容类型,内容处理,内容传输编码和Base64编码,附件的内容都对你那么设置它手动ISN “T必要,除非你想覆盖缺省值。

根据您的PDF生成方法,这将可能是更好的:

invoice = InvoicePdf.new(invoice)
attachments["invoice.pdf"] = { :mime_type => 'application/pdf', :content => invoice.render }
mail(:to => @user.email, :subject => "Your Invoice")


Answer 2:

心不是这只是

attachments["invoice.pdf"] = InvoicePdf.new(invoice)

因为3.0吗?



文章来源: Prawn pdf attachments in the email