2010-10-15 89 views
11

我的應用程序創建它不會保存任何地方時,它是由它傳遞給URL(例如,domain.com/letter/2.pdf)渲染的.pdf文件如何在Rails 2.3.5中將prawnto呈現的.pdf附加到電子郵件中?

如何在出站電子郵件中將該實際pdf作爲附件。

這裏是我的郵件:

def campaign_email(contact,email) 
    subject email.subject 
    recipients contact.email 
    from  'Me <[email protected]>' 
    sent_on Date.today 

    attachment = File.read("http://localhost:3000/contact_letters/#{attachment.id}.pdf") 

    attachment "application/pdf" do |a| 
    a.body = attachment 
    a.filename = "Othersheet.pdf" 
    end 
end 

這是創建/控制器呈現PDF:

def create 
    @contact_letter = ContactLetter.new(params[:contact_letter]) 

    @contact = Contact.find_by_id(@contact_letter.contact_id) 
    @letter = Letter.find_by_id(@contact_letter.letter_id) 

    if @contact_letter.save 
     flash[:notice] = "Successfully created contact letter." 

     #redirect_to contact_path(@contact_letter.contact_id) 
     redirect_to contact_letter_path(@contact_letter, :format => 'pdf') 
    else 
     render :action => 'new' 
    end 
    end 

注:我硬編碼的本地主機:3000 /我如何可以替換與變量所以在開發它是localhost:3000和生產是否是正確的域?有沒有一種辦法,包括在此路由)

ERROR:我得到一個

Invalid argument - http://localhost:3000/contact_letters/9.pdf

+0

你在軌道2或3? – thatmiddleway 2010-10-15 07:09:32

+0

rails 2.3.5(?) – Angela 2010-10-15 19:11:41

+0

你還可以顯示發送pdf的字母控制器的代碼嗎? – nathanvda 2010-10-20 12:12:29

回答

0

我把它直接傳遞PDF對象到campaign_email方法,然後分配工作一個附件。

5

下面是軌道2

class ApplicationMailer < ActionMailer::Base 
# attachments 
def signup_notification(recipient, letter) 
    recipients  recipient.email_address_with_name 
    subject   "New account information" 
    from   "[email protected]" 

    attachment :content_type => "image/jpeg", 
    :body => File.read("an-image.jpg") 

    attachment "application/pdf" do |a| 
    a.body = letter 
    end 
end 
end 
在你看來

或任何你調用你的方法的例子:

ApplicationMailer.deliver_signup_notification(letter) 
+0

你在這裏生成我的PDF文件是什麼意思....它會是路徑嗎? – Angela 2010-10-15 19:12:18

+0

那個,或者你用來創建你的pdf的方法 – thatmiddleway 2010-10-15 22:07:37

+0

這是創建方法的路徑:contact_letter_path(@contact_letter,:format =>'pdf')是我放在那裏的嗎? – Angela 2010-10-16 01:32:15

0

一個簡單的解決方案就是使用net/http和open-uri獲取url內容來獲取附件換貨

attachments['free_book.pdf'] = open("http://#{request.host}/letter/#{id}.pdf") 

如:

def campaign_email(contact,email) 
    subject email.subject 
    recipients contact.email 
    attachments['free_book.pdf'] = open("http://#{request.host}/letter/#{id}.pdf") 
    from  'Me <[email protected]>' 
    sent_on Date.today 

    body  :email => email 
end 

,或者致電PDF生成你的郵件控制器的動作裏面

+0

如何在郵件中調用PDF生成控制器操作?我可以使用 – Angela 2010-11-26 18:10:00

+0

附件['free.pdf'] = open(contact_letter_path(@contact_letter,:format =>'pdf')) – Angela 2010-11-26 18:10:35

+0

附件不是ActionMailer的已知方法 - 這是我得到的錯誤.... – Angela 2010-11-26 18:25:35

相關問題