2012-03-13 4 views
3

J'essaie d'envoyer un courrier électronique contenant une pièce jointe créée par l'utilisateur.Impossible d'envoyer xlsx en pièce jointe dans Rails mailer

attachments[document.display_name] = File.read(document.public_filename) 

Cela fonctionne dans la plupart des conditions (y compris .docx, mais échoue pour les fichiers .xlsx avec l'erreur:

invalid byte sequence in UTF-8 

J'utilise attachment_fu pour télécharger les pièces jointes et delayed_job à Différerenvoi les emails , mais le fichier que j'essaie de joindre semble ok, et je peux l'ouvrir avec succès en dehors de l'application

J'ai également vu une suggestion pour changer le code comme suit, mais cela ne semble pas aider: inclure un extra

attachments[document.display_name] = { :content => File.read(document.public_filename), :transfer_encoding => :binary } 

Comment puis-je faire fonctionner le code pour tous les types de pièces jointes?

Répondre

4

Vous devez spécifier le mode ou le codage pour le laisser lire le fichier sous forme binaire:

attachments[document.display_name] = File.read(document.public_filename, :mode => 'rb') 

ou

attachments[document.display_name] = File.read(document.public_filename, :encoding => 'BINARY') 
+0

Grand, a travaillé un régal. Merci. – niciliketo