使用Rails邮件程序的虾PDF?

时间:2010-04-28 21:43:34

标签: ruby-on-rails email pdf prawn

我已经成功创建了一个发送创建Kase的电子邮件,但现在我需要附加由Prawn和Prawno动态创建的PDF。基本上,当您访问某个kase(例如application.com/kase/1)时,只需将URL附加到.pdf,即application.com/kase/1。

我花了很多时间让PDF工作,看看我想要什么,但我无法弄清楚如何将PDF添加到自动发送电子邮件 - 主要是因为我无法弄清楚如何给它一个链接,因为它是自动的生成。

有没有人设法让这个工作?

谢谢,

丹尼

4 个答案:

答案 0 :(得分:3)

我认为如果将生成的pdf存储在某个地方会更好 - 用于缓存目的等。 但是使用当前配置,您可以使用Net::HTTP读取生成的页面并附加响应:

require 'net/http'

def your_mailer_method(record)
  #...
  attachment "application/pdf" do |a|
    a.body = Net::HTTP.get('yourdomain.com', "/kase/#{record.id}.pdf")
    a.filename="your_pdf_name.pdf"
  end  
end

答案 1 :(得分:3)

你真的应该考虑不使用Prawnto,并创建一个Prawn :: Document的子类来做你需要的。然后,在您的控制器和邮件程序代码中,它应该只是:

MyReport.new.render

请参阅Prawn文档:

http://wiki.github.com/sandal/prawn/using-prawn-in-rails

答案 2 :(得分:0)

对于较新的,当你可以::

时,你真的不需要再次发送请求
mail.attachments["invoice.pdf"] = {:mime_type => "application/pdf" , :content => pdf_generator}

而不是这样做::

send_data pdf.render , :filename => file_name_here , :type => "application/pdf"

这样做::

pdf.render , :filename => file_name_here , :type => "application/pdf"

请勿send_data,只需在第一个代码段中提及您的电子邮件附件中的pdf。

事实上,我刚刚在github上写了一个Gist。

答案 3 :(得分:0)

此代码适用于我

def send_file(file, subject, text, to_email)
      @subject = subject
      @text = text
      attachments["#{invoice.invoice_number}.pdf"] = file
      from_email = abc@xyz.com      
mail(:to => to_email, :from => from_email, :subject=> subject)
  end