Come si fa ad evitare gli allegati di posta elettronica da rendering in linea con ActionMailer
-
19-09-2019 - |
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?
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