Pregunta

Estoy tratando de enviar un correo electrónico que contiene un archivo adjunto creado por el usuario.

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

Esto funciona en la mayoría de las condiciones (incluyendo .docx, pero falla para archivos .xlsx con el error:

invalid byte sequence in UTF-8

Estoy usando Attachment_FU para cargar los archivos adjuntos, y retarted_job para diferir el envío de los correos electrónicos, sin embargo, el archivo que estoy tratando de adjuntar se ve bien, y puedo abrirlo correctamente fuera de la aplicación.

También vi una sugerencia para cambiar el código de la siguiente manera, pero no parece que ayuda: incluir un extra.

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

¿Cómo puedo hacer que el código funcione para todos los tipos de adjuntos?

¿Fue útil?

Solución

Necesita especificar el modo o la codificación para que lea el archivo como binario:

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

o

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top