代码之家  ›  专栏  ›  技术社区  ›  Scott Miller

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

  •  3
  • Scott Miller  · 技术社区  · 17 年前

    使用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 回复  |  直到 17 年前
        1
  •  3
  •   Scott Miller    17 年前

    好吧,我走开了一会儿,回来用谷歌搜索了一下,得到了答案!

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

    对于mailer主方法,我去掉了body并添加了这个显式呈现。注意-我跳过了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