在Sendgrid X-SMTPAPI标头中,新行解析为= 0A

时间:2013-04-13 19:59:36

标签: ruby-on-rails ruby sendgrid

我使用Sendgrid将邮件发送到邮件列表,使用X-SMTPAPI标头指定多个收件人。从Sendgrid documentation“必须包裹标题以保持行长度低于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 ")

我没有在标题中获取换行符,而是从日志文件中获取以下内容

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"]}

请注意\ 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"]}

请注意,我添加的换行符仍然显示为“= 0A”。但有些东西似乎在增加自己的包装。这种包装是自动的,并且足以使我的标题行长度不超过要求吗?

2 个答案:

答案 0 :(得分:5)

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

实施例

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"]}

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

答案 1 :(得分:0)

标题中的字符似乎必须根据RFC 2047 [14]的规则进行编码 符合%0A

的ASCII表\n状态