我已经成功创建了一个发送创建Kase的电子邮件,但现在我需要附加由Prawn和Prawno动态创建的PDF。基本上,当您访问某个kase(例如application.com/kase/1)时,只需将URL附加到.pdf,即application.com/kase/1。
我花了很多时间让PDF工作,看看我想要什么,但我无法弄清楚如何将PDF添加到自动发送电子邮件 - 主要是因为我无法弄清楚如何给它一个链接,因为它是自动的生成。
有没有人设法让这个工作?
谢谢,
丹尼
答案 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文档:
答案 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