如何使用长度超过990个字符的行发送csv附件?

Cha*_*zak 16 csv email attachment mime-types sendgrid

好的.我认为这个问题与我的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&e = UTF-8

更新

我试过在base64中对附件进行编码,如下所示:

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

这似乎没有什么不同.我通过Sparrow for Mac收到了me.com帐户的电子邮件.我将尝试使用gmail的web界面.

pju*_*ble 26

这似乎是因为SendGrid邮件服务器正在修改附件内容.如果您发送带有纯文本存储mime类型的附件(例如text/csv),它将按照您观察到的每990个字符包装内容.我认为这与RFC 2045/821有关:

  1. 内容传输编码标头字段

    许多可以通过电子邮件有效传输的媒体类型以其"自然"格式表示为8位字符或二进制
    数据.这些数据不能通过某些传输协议传输.
    例如,RFC 821(SMTP)将邮件限制为7位US-ASCII
    数据,行数不超过1000个字符,包括任何尾随的CRLF行分隔符.

    因此,有必要定义一种
    将这种数据编码成7位短线格式的标准机制.
    为限制较少的格式正确标记未编码的材料,以便在限制较少的运输中直接使用也是可取的.该文件
    规定这种编码将由新的"Content
    -Transfer-Encoding"标题字段指示.此字段尚未由
    任何先前的标准定义.

如果使用base64编码而不是默认的7位发送附件,则附件保持不变(不添加换行符):

attachments['file.csv']= { :data=> ActiveSupport::Base64.encode64(@string), :encoding => 'base64' }
Run Code Online (Sandbox Code Playgroud)

  • 不要添加`:mime_type =>'text/csv'`(正如你在问题更新中所做的那样),它会将`:encoding`值设置回7位,这样附件就不会被解码. (3认同)