我正在尝试发送包含用户创建的文件附件的电子邮件。
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 }
如何使代码适用于所有附件类型?
答案 0 :(得分:4)
您需要指定模式或编码,以便将文件读取为二进制文件:
attachments[document.display_name] = File.read(document.public_filename, :mode => 'rb')
或
attachments[document.display_name] = File.read(document.public_filename, :encoding => 'BINARY')