我正在尝试发送包含由用户创建的文件附件的电子邮件。

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

此工作在大多数条件(包括.docx,但失败,但具有错误的.xlsx文件:

invalid byte sequence in UTF-8
.

我正在使用附件_fu上传附件,而delayed_job要推迟发送电子邮件,但我正在尝试附加的文件看起来正常,我可以在应用程序外成功打开它。

我还看到了一个如下更改代码的建议,但它似乎没有帮助: 包括额外的。

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

如何为所有附件类型进行代码工作?

有帮助吗?

解决方案

您需要指定模式或编码,以便将文件读为二进制文件:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top