2010-12-05 5 views
3

Mes rails 3 app sur heroku reçoit des e-mails entrants. Je veux être en mesure d'accepter les pièces jointes, mais je ne peux pas obtenir de rails pour traiter les pièces jointes sans erreur.Analyse d'une pièce jointe d'un e-mail w Trombone - Possible sans fichier temporaire?

L'idéal serait de passer la pièce jointe fournie par ActionMailer.

message_all = Mail.new(params[:message]) 
message_all.attachments.each do |a| 
attachments.each do |a| 
.attachments.build(
    :attachment => a 
) 
end 
end 

erreurs Il avec: NoMethodError (undefined method retour rapide » pour #)` Lorsque des pièces jointes est un modèle, avec pièce jointe est

paperclip

idées y? Existe-t-il une manière différente de passer la pièce jointe = a, au trombone?

J'ai essayé une autre approche, la création d'un fichier temporaire:

tempfile = File.new("#{Rails.root.to_s}/tmp/#{a.filename}", "w+") 
tempfile << a.body 
tempfile.puts 
attachments.build(
:attachment => File.open(tempfile.path)) 

Le problème avec le fichier temporaire est des fichiers sans extentions « bla » au lieu de « blah.png » brisons ce qui est la raison pour laquelle paperclip je veux éviter la tempfile. et en créant des erreurs d'identité, imagemagick ne sait pas ce qu'elles sont sans ext.

appréciez énormément tous les conseils à ce sujet.

Répondre

7

Le problème avec les méthodes que vous utilisez est qu'ils ne contiennent pas toutes les informations nécessaires pour trombone comme le type de contenu et le nom de fichier d'origine. J'ai écrit un blog post à ce sujet tout à l'heure et comment vous pourriez simuler le format et utiliser une pièce jointe d'email en tant que pièce jointe d'un trombone.

L'essentiel était de faire:

file = StringIO.new(attachment) 
file.class.class_eval { attr_accessor :original_filename, :content_type } 
file.original_filename = attachment.filename 
file.content_type = attachment.mime_type 
+0

Cette première ligne devrait probablement file = StringIO.new (attachment.decoded) –

+0

Votre blog est @ Steve vers le bas. – Smooth

+0

@Smooth merci pour les heads-up. Cela semble fonctionner correctement pour moi maintenant. Espérons juste un petit problème temporaire. –

Questions connexes