我使用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”。但有些东西似乎在增加自己的包装。这种包装是自动的,并且足以使我的标题行长度不超过要求吗?
答案 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
\n
状态