Проблема ActionMailer - какой правильный синтаксис для отправки PDF-вложений - PullRequest
3 голосов
/ 10 февраля 2009

Каков правильный синтаксис для отправки электронного письма с помощью 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 голосов
/ 10 февраля 2009

Хорошо, я ненадолго отошел, вернулся, немного погуглил и получил ответ!

Из API:

Неявное отображение шаблона не выполняется, если в электронное письмо были добавлены какие-либо вложения или части. Это означает, что вам придется вручную добавлять каждую часть к электронному письму и устанавливать тип содержимого электронного письма на несколько частей / альтернативный.

Для основного метода почтовой программы я отключил 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
...