Question

I am trying to send an email containing a file attachment created by the user.

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

This works in most conditions (including .docx, but fails for .xlsx files with the error:

invalid byte sequence in UTF-8

I am using attachment_fu to upload the attachments, and delayed_job to defer sending the emails, however the file I am trying to attach looks ok, and I can open it successfully outside the application.

I also saw a suggestion to change the code as follows, but it does not seem to help: include an extra.

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

How can I make the code work for all attachment types?

Was it helpful?

Solution

You need to specify the mode or encoding to let it read the file as binary:

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

or

attachments[document.display_name] =  File.read(document.public_filename, :encoding => 'BINARY')
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top