Question

J'essaie d'envoyer un email contenant une pièce jointe créée par l'utilisateur.

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

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

invalid byte sequence in UTF-8

J'utilise pièce jointe_fu pour télécharger les pièces jointes et retardé_job pour différer l'envoi des courriels, mais le fichier que j'essaie de joindre semble correct, et je peux l'ouvrir avec succès en dehors de l'application.

J'ai également vu une suggestion de changer le code comme suit, mais cela ne semble pas aider: inclure un supplément.

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

Comment puis-je faire fonctionner le code pour tous les types d'attachement?

Était-ce utile?

La solution

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

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

ou

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top