Domanda

Sto usando il seguente codice per inviare una e-mail con un allegato PDF:

class StudyMailer < ActionMailer::Base
  def notify_office(study, sent_at = Time.now)
    subject    "Email Subject Goes Here"
    recipients 'user@domain.come'
    from       "#{study.sender.full_name} <#{study.sender.email}>"
    sent_on    sent_at
    body       :study => study
    for document in study.documents   
      attachment :content_type => "application/pdf", :body => File.read(document.document.path) #absolute path to .pdf document
    end
  end
end

Quando il messaggio viene inviato, l'attaccamento sembra rendere in linea come codice binario piuttosto che come un allegato .pdf.

Come faccio a rendere il .pdf come un allegato tipica, piuttosto che in linea?

È stato utile?

Soluzione

attachment :content_type => "application/pdf", 
    :content_disposition => "attachment", 
    :filename => File.basename(fattach), 
    :body => File.new(fattach,'rb').read() 

Si noti la linea di Content-Disposition.

Altri suggerimenti

Credo che si deve indicare la natura multipart della posta elettronica, in modo da aggiungere questa riga sotto la riga from:

content_type    "multipart/alternative"

Il tuo e-mail ha un modello? Se l'email non ha un modello, l'allegato si presenta in linea, anche se tutto il resto è impostato correttamente. Creare un modello di allegato di posta elettronica.

  

viste / notificatore / attachment.html.erb

<p>   Please see attachment    </p>

Poi, nel Notifier, specificare di utilizzare questo modello.

  

notifier.rb

def my_email_method
    ...
    mail(:template_name => 'attachment', :from => from_address, ...)
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top