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

3
使用ActionMailer发送包含PDF文件附件的电子邮件的正确语法是什么?我正在使用Gmail作为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个回答

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

这对你有用吗?文件需要实际驻留在那里吗?我生成我的PDF文件,但不保存它们。 - Satchel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接