ActionMailer问题 - 发送PDF附件的正确语法是什么

时间:2009-02-09 21:08:27

标签: ruby-on-rails actionmailer

使用包含一些PDF文件附件的actionmailer发送电子邮件的正确语法是什么?我正在使用Gmail for SMTP和TLS插件。这是我到目前为止所做的(并尝试过这方面的变化):

**lead_mailer.rb:**

  def auto_response(lead)
    recipients  lead.email
    subject     "Information"
    body        :recipient => lead.first_name
    from        "me@mydomain.com"
    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

问题在于它发送附件,但它们显示为“无名称”,即使在打开它们时它们显示正确。但是,电子邮件的正文根本没有出现。我确信我做的很简单,错了。

1 个答案:

答案 0 :(得分:3)

好的,我走开了一会儿,回来再搜索了一下,得到了答案!

来自API:

如果已将任何附件或部件添加到电子邮件中,则不会执行隐式模板呈现。这意味着您必须手动将每个部分添加到电子邮件中,并将电子邮件的内容类型设置为multipart / alternative。

对于主邮件方法,我换出了body并添加了这个显式渲染。注意 - 我跳过了多部分/替代方案,它很有效,很可能是因为我发送的是纯文本电子邮件。

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