6

我正在使用 Sendgrid 将电子邮件发送到邮件列表,使用 X-SMTPAPI 标头指定多个收件人。从Sendgrid 文档中“必须包装标题以将行长度保持在 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 字符被替换为=0A. 此序列被 Sendgrid 服务器视为无效而拒绝。

有什么想法可以将正确的换行符放入标题中吗?

编辑:我尝试添加“放置标题”以查看标题中设置的内容。然后就是我发现的

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

4

2 回答 2

6

如果您给它适当的间距,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.

于 2013-04-14T23:56:27.613 回答
0

似乎标头中的字符必须根据RFC 2047 [14]的规则进行编码。
Accodingly 到 ASCII 表%0A状态\n

于 2013-04-13T22:47:46.760 回答