Ruby on rails 在Sendgrid X-SMTPAPI标头中解析为=0A的换行符
我使用Sendgrid向邮件列表发送电子邮件,使用X-SMTPAPI头指定多个收件人。从“标题必须被包装,以保持线长度在72以下。” 我正在使用ActionMailer发送电子邮件,并使用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
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"]}