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有关:
内容传输编码标头字段
许多可以通过电子邮件有效传输的媒体类型以其"自然"格式表示为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)