16

大丈夫。この問題は私のrailsアプリに関係していると思いましたが、メールの添付ファイルのより深い動作に関係しているようです。

Railsアプリから店舗の注文を処理する倉庫にcsvファイルを送信する必要があります。ウェアハウスにはCSV形式があり、皮肉なことにCSVファイルのヘッダー行は非常に長い(1000文字以上)。

テストメールを受信したときに、csvファイルのヘッダー行に改行が入り、何がそこにあるのか理解できませんでした。しかし、いくつかのグーグルがついに理由を示しました:添付ファイルの行文字数の制限は1000です。なぜですか?知らない。ばかげているようですが、どういうわけかこのcsvファイルを送信する必要があります。

添付ファイルのMIMEタイプを手動でtext/csvに設定しようとしましたが、それは役に立ちませんでした。誰かがこの問題を解決する方法を知っていますか?

関連するGoogleの結果:http ://www.google.com/search?client = safari&rls = en&q = csv + wrapped + 990&ie = UTF-8&oe = UTF-8

アップデート

私は次のようにbase64で添付ファイルをエンコードしようとしました:

    attachments['205.csv'] = {:data=> ActiveSupport::Base64.encode64(@string), :encoding => 'base64', :mime_type => 'text/csv'}

それは違いを生んでいないようです。SparrowforMac経由でme.comアカウントのメールを受信して​​います。Gmailのウェブインターフェースを使ってみます。

4

2 に答える 2

26

これは、SendGrid メール サーバーが添付ファイルの内容を変更しているためと思われます。プレーン テキスト ストレージ MIME タイプ (例: text/csv) の添付ファイルを送信すると、ご覧のとおり、コンテンツが 990 文字ごとにラップされます。これはRFC 2045/821に関連していると思います:

  1. Content-Transfer-Encoding ヘッダー フィールド

    電子メールで便利に転送できる多くのメディア タイプは、「自然な」形式で、8 ビットの文字またはバイナリ
    データとして表されます。このようなデータは、一部の転送プロトコルでは送信できません。
    たとえば、RFC 821 (SMTP) は、メール メッセージを 7 ビットの US-ASCII
    データに制限し、行は末尾の CRLF 行区切り文字を含めて 1000 文字を超えないようにします。


    したがって、そのようなデータを 7 ビットの短い行形式にエンコードするための標準メカニズムを定義する必要があります。
    制限の少ないトランスポートで直接使用するために、制限の少ない形式でエンコードされていない素材を適切にラベル付けすることも望ましいです。このドキュメントでは、そのようなエンコーディングが新しい「Content- Transfer-Encoding」ヘッダー フィールド
    によって示されることを指定します。
    このフィールドは
    、以前の標準では定義されていません。

デフォルトの 7 ビットの代わりに base64 エンコーディングを使用して添付ファイルを送信すると、添付ファイルは変更されません (改行は追加されません)。

attachments['file.csv']= { :data=> ActiveSupport::Base64.encode64(@string), :encoding => 'base64' }
于 2012-05-05T17:52:02.030 に答える
1

これを引き起こす改行をデータに含めることはできますか? かどうかを確認してください

csv_for_orders(orders).lines.count == orders.count

その場合、迅速な/ハック的な修正により、呼び出す場所が変更される可能性があります(他の line_item 呼び出しについても同じです) values_for_line_item(item)values_for_line_item(item).map{|c| c.gsub(/(\r|\n)/, '')}

于 2012-05-05T04:34:26.467 に答える