您在使用 SendGrid 托管 Discourse 吗?必读!

我最初是在 mailop 列表上看到这个的,但它也被发布在 Reddit 上。摘录如下:

如果您尽管有干净的标题和良好的声誉,但在 Gmail 中仍难以送达,您的 ESP 可能会在您不知情的情况下破坏您的邮件。SendGrid 的 SMTP 中继违反了 RFC 2047 和 RFC 2369,因为它在 List-Unsubscribe 标题的值超过 77 字节时对其进行 MIME 编码。这会破坏 Gmail 和 Outlook 中的退订链接。该问题已在内部确认,但仍未解决。SendGrid 每月发送超过 1000 亿封电子邮件——这是一次大规模的标准合规性失败,对可送达性和合规性产生了实际影响。

只要此标题为 77 字节或更少,SendGrid 就会按原样转发。但是,当值达到 78 字节时,其 SMTP 中继会强制使用 MIME 编码单词语法 (RFC 2047) 重写它。这种编码明确禁止在 List-Unsubscribe 等结构化标题中使用。

这是 SendGrid 发送的内容:

List-Unsubscribe: =?us-ascii?Q?=3Chttps=3A=2F=2Fwww=2Eexample=2Ecom=2Funsubscribe=2F=3E=2C=3Cmailto=3Aunsubscribe=40opt?= =?us-ascii?Q?out=2Eexample=2Ecom=3E?=

这种编码会破坏 Gmail 和 Outlook 中退订链接的解析。因此,收件人无法通过 UI 元素轻松退订,这可能导致更高的投诉率和更低的收件箱送达率。更糟糕的是,Gmail 的“显示原始邮件”视图会解码标题,因此一开始可能不会注意到重写。

此行为违反了:

RFC 2047,禁止在 List-Unsubscribe 等结构化标题中使用编码单词。

RFC 2369,它定义了 List-Unsubscribe 标题的语法和结构,并假定其可解析为纯 ASCII。

Discourse 发送的 list-unsubscribe 标题示例是:

List-Unsubscribe: <https://meta.discourse.org/email/unsubscribe/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl>

仅唯一令牌就有 64 个字符,因此我们发送的退订链接保证会超过 77 个字符。

我们不使用 SendGrid,但我知道我们的许多自托管用户会使用它,所以我认为让这里的每个人都意识到这一点很重要。

这里有 SendGrid 用户可以确认此行为吗?

8 个赞

我已经从@pfaffman(谢谢)那里得到了独立的确认,他看到通过SendGrid发送的邮件有此行为:

List-Unsubscribe: 
 =?us-ascii?Q?=3Chttps=3A=2F=2Fforum=2Econtoso=2Ecom=2Femail=2Funsubscribe=2Fb87c085a68d9210e78?
 =?us-ascii?Q?6478e2a54849e5bca9b8002ff0081b0a77466e0?
 =?us-ascii?Q?f71c27=3E?=
List-Unsubscribe-Post: List-Unsubscribe=One-Click

并且没有出现“一键退订”链接(这很糟糕)。

3 个赞

确认相同的令牌长度

  List-Unsubscribe: <https://meta.discourse.org/email/unsubscribe/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl>
List-Unsubscribe: <https://discuss.mydomain.org/email/unsubscribe/7d1687b646074f0efc9abef16daeb42200f1beca5767de095960f4ac6b9b4ea2>

确认缺少取消订阅图片,仅存在链接

此外,Gmail 一直接受 discourse/sendgrid 注册邮件,但要么将它们放入垃圾邮件,要么标记为可疑,阻止图片并将其放入收件箱。