質問

私はユーザーによって作成されたファイル添付ファイルを含む電子メールを送信しようとしています。

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

これはほとんどの条件で動作します(.docxを含むが、エラーで.xlsxファイルに対して失敗する:

invalid byte sequence in UTF-8
.

attachment_fuを使用して添付ファイルをアップロードし、遅延_jobを電子メールの送信を延期しますが、私が添付しようとしているファイルはOKを添付していて、アプリケーションの外で正常に開くことができます。

私はまた、コードを次のように変更するための提案を見ましたが、それは役に立たないようです。 余分なものを含めます。

    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