Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Sendgrid X-SMTPAPI标头中解析为=0A的换行符_Ruby On Rails_Ruby_Sendgrid - Fatal编程技术网

Ruby on rails 在Sendgrid X-SMTPAPI标头中解析为=0A的换行符

Ruby on rails 在Sendgrid X-SMTPAPI标头中解析为=0A的换行符,ruby-on-rails,ruby,sendgrid,Ruby On Rails,Ruby,Sendgrid,我使用Sendgrid向邮件列表发送电子邮件,使用X-SMTPAPI头指定多个收件人。从“标题必须被包装,以保持线长度在72以下。” 我正在使用ActionMailer发送电子邮件,并使用headers方法设置X-SMTPAPI头。为了使行数少于72个字符,我尝试用逗号+换行符+空格替换每个逗号。比如说, headers["X-SMTPAPI"] = { :to => ['user1@example.com','user2@example.com','user3@examp

我使用Sendgrid向邮件列表发送电子邮件,使用X-SMTPAPI头指定多个收件人。从“标题必须被包装,以保持线长度在72以下。”

我正在使用ActionMailer发送电子邮件,并使用
headers
方法设置X-SMTPAPI头。为了使行数少于72个字符,我尝试用逗号+换行符+空格替换每个逗号。比如说,

headers["X-SMTPAPI"] = {
        :to => ['user1@example.com','user2@example.com','user3@example.com','user4@example.com','user5@example.com','user6@example.com']
}.to_json.gsub(',',",\n ")
我没有在标题中获取换行符,而是(从日志文件)获取以下内容

请注意\n字符将替换为
=0A
。Sendgrid服务器拒绝此序列,因为它无效

我能做些什么来在标题中添加适当的换行符呢

编辑: 我尝试添加一个“puts headers”来查看在标题中设置了什么。这就是我发现的

Date: Sat, 13 Apr 2013 18:21:36 -0400
Message-ID: <5169da701cd26_5343fe1776afc50749b4@saunders.mail>
Mime-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-SMTPAPI: {"to":["user1@example.com",=0A "user2@example.com",=0A
 "user3@example.com",=0A "user4@example.com",=0A "user5@example.com",=0A
 "user6@example.com"]}
日期:2013年4月13日星期六18:21:36-0400
消息ID:
Mime版本:1.0
内容类型:文本/纯文本
内容传输编码:7bit
X-SMTPAPI:{“到”:[“user1@example.com“,=0A”user2@example.com“,=0A
"user3@example.com“,=0A”user4@example.com“,=0A”user5@example.com“,=0A
"user6@example.com"]}

请注意,我添加的换行符仍然显示为“=0A”。但某种东西似乎正在自行添加包装。这是否是自动换行,足以防止标题行长度超过要求?

似乎标题中的字符必须按照的规则进行编码。

根据ASCII表格
%0A
的规定,
\n

ActionMailer实际上会为您处理行的折叠和编码,如果您给它适当的间距。您应该使用
JSON.generate
为其指定间距:

这将导致:

X-SMTPAPI: { "category":"welcome_email", "to":[  "user1@example.com",
 "user2@example.com",  "user3@example.com",  "user4@example.com",  
 "user5@example.com",     "user6@example.com"]}

正如您所看到的,当ActionMailer遇到空白时,它会为您包装东西-不需要通常的
\r\n

,如果您
将标题[“X-SMTPAPI”]
放在
到\u json
之后,则输出是相同的?是的,是相同的。但我注意到有一些线包装正在应用,但不是我插入它的地方。请参见上面的编辑。如果我的换行符是自动编码的,那么如何折叠长标题行?@DaveIsaacs,我不确定,但您可以试试
…gsub(',',“,\\n”)
我试过了。不起作用。
\\n
被解析为两个单独的字符:a\和n.@DaveIsaacs,以后不是解释为新行吗?。。不好(你是对的。我在探索ActionMailer Mail::UnstructuredField类时刚刚发现了这一点。谢谢!我要补充的是,Sendgrid实际上要求你使用这种方法(空格与换行符)如果使用Rails和ActionMailer;如果直接嵌入换行符,Sendgrid将在解析JSON时抛出错误,但如果使用空格,ActionMaler会将其转换为Sendgrid友好的格式。
headers["X-SMTPAPI"] = JSON.generate({
  :category => "welcome_email",
  :to => ['user1@example.com','user2@example.com','user3@example.com','user4@example.com','user5@example.com','user6@example.com']
}, :indent => ' ')
X-SMTPAPI: { "category":"welcome_email", "to":[  "user1@example.com",
 "user2@example.com",  "user3@example.com",  "user4@example.com",  
 "user5@example.com",     "user6@example.com"]}