Невозможно отправить xlsx как вложение в почтовой программе Rails

Я пытаюсь отправить электронное письмо с вложенным файлом, созданным пользователем.

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

Это работает в большинстве случаев (включая.docx, но не работает для файлов.xlsx с ошибкой:

invalid byte sequence in UTF-8

Я использую attachment_fu, чтобы загрузить вложения, и delayed_job, чтобы отложить отправку электронных писем, однако файл, который я пытаюсь прикрепить, выглядит нормально, и я могу успешно открыть его вне приложения.

Я также видел предложение изменить код следующим образом, но, похоже, это не помогло: включить дополнительный.

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

Как я могу заставить код работать для всех типов вложений?

1 ответ

Решение

Вам нужно указать режим или кодировку, чтобы он считывал файл в двоичном виде:

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

или же

attachments[document.display_name] =  File.read(document.public_filename, :encoding => 'BINARY')
Другие вопросы по тегам