用actionmailer发送包含某些PDF文件附件的电子邮件的正确语法是什么?我将Gmail与TLS插件一起用于SMTP。这是我到目前为止的内容(也已经尝试过对此进行变形):

**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

问题在于,它发送附件,但是即使打开后它们也会正确显示,但它们却显示为“no name”。但是,电子邮件的正文根本不会出现。我确定我在做简单,错误的事情。

最佳答案

好吧,我走了片刻,然后回来,用谷歌搜索了一下,得到了答案!

从API:

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

对于主要的mailer方法,我切换出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

关于ruby-on-rails - ActionMailer问题-发送PDF附件的正确语法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/529970/

10-12 19:11