2009-02-09 83 views
3

發送包含某些PDF文件附件的actionmailer的電子郵件的正確語法是什麼?我正在使用Gmail for SMTP和TLS插件。以下是我迄今爲止(並在此嘗試變化太大):ActionMailer問題 - 發送PDF附件的正確語法是什麼

**lead_mailer.rb:** 

    def auto_response(lead) 
    recipients lead.email 
    subject  "Information" 
    body  :recipient => lead.first_name 
    from  "[email protected]" 
    attachment "application/pdf" do |a| 
       a.body = File.read(RAILS_ROOT + "/public/files/Datasheet.pdf") 
    end 
    attachment "application/pdf" do |a| 
       a.body = File.read(RAILS_ROOT + "/public/files/OtherSheet.pdf")     
    end 
    end 

**lead_observer.rb:** 

class LeadObserver < ActiveRecord::Observer 
    def after_save(lead) 
    mail = LeadMailer.create_auto_response(lead) 
    LeadMailer.deliver(mail) 
    end 
end 

的問題是,它發送的附件,但它們顯示爲「沒有名字」,即使在打開他們,他們出現正確。但是,電子郵件的主體完全沒有出現。我確信我正在做一些簡單的,錯誤的。

回答

3

好吧,我走開了一會兒,回來並多搜索了一下,得到了答案!

從API:如果任何附件或零件已經被添加到電子郵件中,不進行

隱模板渲染。這意味着您必須手動將每個部分添加到電子郵件中,並將電子郵件的內容類型設置爲multipart/alternative。

對於主郵件的方法,我切換出正文並添加了這個顯式渲染。注意 - 我跳過了multipart/alternative並且工作,很可能是因爲我正在發送純文本電子郵件。

part  :body => render_message('auto_response', :recipient => lead.first_name) 

對於附件命名的問題,這是我做的:

attachment "application/pdf" do |a| 
       a.body = File.read(RAILS_ROOT + "/public/files/OtherSheet.pdf") 
       a.filename = "Othersheet.pdf" 
end 
+0

這篇對你的工作?該文件需要在物理上駐留在那裏嗎?我生成我的pdf,但不保存它們。 – Angela 2010-12-11 23:07:52