Comment puis-je éviter les pièces jointes de courrier électronique de rendu Inline à l'aide ActionMailer
-
19-09-2019 - |
Question
Je suis en utilisant le code suivant pour envoyer un e-mail avec une pièce jointe 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
Lorsque l'e-mail est envoyé, la pièce jointe semble rendre en ligne sous forme de code binaire plutôt que comme une pièce jointe .pdf.
Comment puis-je rendre le .pdf comme pièce jointe typique, plutôt que inline?
La solution
attachment :content_type => "application/pdf",
:content_disposition => "attachment",
:filename => File.basename(fattach),
:body => File.new(fattach,'rb').read()
Remarquez la ligne de disposition de contenu.
Autres conseils
Je crois que vous devez indiquer la nature de l'e-mail multipart, il faut donc ajouter cette ligne sous la ligne de from
:
content_type "multipart/alternative"
Votre e-mail un modèle? Si l'e-mail n'a pas de modèle, la pièce jointe apparaît en ligne, même si tout le reste est configuré correctement. Créer un modèle de courrier électronique de pièce jointe.
vues / notification / attachment.html.erb
<p> Please see attachment </p>
Ensuite, dans notificateur, indiquez à utiliser ce modèle.
notifier.rb
def my_email_method
...
mail(:template_name => 'attachment', :from => from_address, ...)
end