2009-12-15 17 views
1

J'utilise le code suivant pour envoyer un e-mail avec une pièce jointe pdf:Comment prévenir les pièces jointes de courrier électronique de rendu Inline utilisant ActionMailer

class StudyMailer < ActionMailer::Base 
    def notify_office(study, sent_at = Time.now) 
    subject "Email Subject Goes Here" 
    recipients '[email protected]' 
    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 binaire code plutôt que comme une pièce jointe .pdf.

Comment est-ce que je rends le .pdf comme une pièce jointe typique, plutôt qu'inline?

Répondre

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

Notez la ligne de contenu-disposition.

+0

ajouter l'Attachement dans un bloc ne semble pas affecter la façon dont l'attachement est rendu – rswolff

+0

s'avère que ce problème avait plus à voir avec le nom du modèle de vue email que toute autre chose, mais je marque cela comme la réponse parce que la pièce content_disposition était également nécessaire. – rswolff

0

Je crois que vous devez indiquer la nature de l'e-mail multipart, il faut donc ajouter cette ligne sous la ligne from:

content_type "multipart/alternative" 
+0

ajoutant le content_type ne semble pas affecter la façon dont la pièce jointe est rendue. – rswolff

0

Est-ce que 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 correctement configuré. Créez un modèle d'e-mail de pièce jointe.

vues/notification/attachment.html.erb

<p> Please see attachment </p> 

Puis, en notificateur, indiquez à utiliser ce modèle.

notifier.rb

def my_email_method 
    ... 
    mail(:template_name => 'attachment', :from => from_address, ...) 
end