Rails 2.3.11 ActionMailer не отображает HTML, когда к письму прикреплено вложение - PullRequest
2 голосов
/ 10 июня 2011

Я использую Rails 2.3.11.Я создал UserMailer с помощью следующих методов:

     def rsvp_created(user, rsvp, pdf_file)
        setup_email(user)
        content_type "multipart/mixed"
        @subject << "Your RSVP for #{rsvp.ticket.holiday.title}"
        @body[:rsvp] = rsvp

        attachment :content_type => 'application/pdf', 
                   :body => File.read(pdf_file), 
                   :filename => "#{rsvp.confirmation_number}.pdf"
      end

      def rsvp_cancelled(user, rsvp)
        setup_email(user)
        content_type "text/html"
        @subject << "Cancelled RSVP for #{rsvp.ticket.holiday.title}"
        @body[:rsvp] = rsvp
        @body[:holiday_url] = APP_CONFIG['site_url'] + holiday_path(rsvp.ticket.holiday)
      end

protected
  def setup_email(user)
    @recipients = "#{user.email}"
    @from = APP_CONFIG['admin_email']
    @subject = "[#{APP_CONFIG['site_name']}] "
    @sent_on = Time.now
    @body[:user] = user
  end

rsvp_cancelled отлично работает и правильно отправляет электронную почту.Но электронная почта rsvp_created, которая имеет вложение, не работает должным образом.Он отправляет письмо с вложенным файлом, но не отображает текст.Кто-нибудь сталкивался с этой проблемой раньше или знает, как я могу решить ее?

Спасибо

Ответы [ 3 ]

2 голосов
/ 10 июня 2011

В Rails 2.x по той или иной причине вам нужно определить все части для отображения HTML.

def rsvp_created(user, rsvp, pdf_file)
  setup_email(user)
  content_type "multipart/mixed"
  @subject << "Your RSVP for #{rsvp.ticket.holiday.title}"

  part :content_type => 'multipart/alternative' do |copy|
    copy.part :content_type => 'text/html' do |html|
      html.body = render( :file => "rsvp_created.text.html.erb", 
                          :body => { :rsvp => rsvp } )
    end
  end

  attachment :content_type => 'application/pdf', 
             :body => File.read(pdf_file), 
             :filename => "#{rsvp.confirmation_number}.pdf"

end

К счастью, похоже, что это не так в Rails 3.x.

0 голосов
/ 12 сентября 2013

Мне удалось заставить мой работать с ответом Дугласа, но я также смог заставить его работать в одну строку. Я использовал шаблон, но он также работает, заменив метод rsvp на метод render_message.

part :content_type => "text/html", 
     :body => render_message("template_name", { :symbol => value } )
0 голосов
/ 27 сентября 2011

Я пытался сделать то же самое, но, следуя ответу Дугласа выше, получал испорченные вложения в pdf.Я наконец смог решить проблему, прочитав PDF-файл в двоичном режиме:

attachment :content_type => 'application/pdf', 
           :body => File.open(pdf_file, 'rb') {|f| f.read} 
           :filename => "#{rsvp.confirmation_number}.pdf" 
...