Rails 3 ActionMailer and Wicked_PDF

前端 未结 3 1534
后悔当初
后悔当初 2020-12-08 15:21

I\'m trying to generate emails with rendered PDF attachements using ActionMailer and wicked_pdf.

On my site, I\'m using already both wicked_pdf and actionmailer se

3条回答
  •  执念已碎
    2020-12-08 16:01

    WickedPDF can render to a file just fine to attach to an email or save to the filesystem.

    Your method above won't work for you because generate_pdf is a method on the mailer, that returns a mail object (not the PDF you wanted)

    Also, there is a bug in ActionMailer that causes the message to be malformed if you try to call render in the method itself

    http://chopmode.wordpress.com/2011/03/25/render_to_string-causes-subsequent-mail-rendering-to-fail/

    https://rails.lighthouseapp.com/projects/8994/tickets/6623-render_to_string-in-mailer-causes-subsequent-render-to-fail

    There are 2 ways you can make this work,

    The first is to use the hack described in the first article above:

    def email_invoice(invoice)
      @invoice = invoice
      attachments["invoice.pdf"] = WickedPdf.new.pdf_from_string(
        render_to_string(:pdf => "invoice",:template => 'documents/show.pdf.erb')
      )
      self.instance_variable_set(:@lookup_context, nil)
      mail :subject => "Your Invoice", :to => invoice.customer.email
    end
    

    Or, you can set the attachment in a block like so:

    def email_invoice(invoice)
      @invoice = invoice
      mail(:subject => 'Your Invoice', :to => invoice.customer.email) do |format|
        format.text
        format.pdf do
          attachments['invoice.pdf'] = WickedPdf.new.pdf_from_string(
            render_to_string(:pdf => "invoice",:template => 'documents/show.pdf.erb')
          )
        end
      end
    end
    

提交回复
热议问题