Usate SendGrid ospitando Discourse? Da leggere!

L’ho visto originariamente sulla lista mailop, ma è stato anche pubblicato su Reddit. Estratti qui sotto:

Se stai lottando con il posizionamento nella posta in arrivo di Gmail nonostante intestazioni pulite e una buona reputazione, il tuo ESP potrebbe sabotare i tuoi messaggi a tua insaputa. Il relay SMTP di SendGrid viola RFC 2047 e RFC 2369 codificando MIME l’intestazione List-Unsubscribe non appena il suo valore supera gli 77 byte. Questo interrompe i link di annullamento dell’iscrizione in Gmail e Outlook. Il problema è stato confermato internamente ma rimane irrisolto. SendGrid invia oltre 100 miliardi di email al mese: questo è un massiccio fallimento di conformità agli standard con conseguenze reali per la recapitalità e la conformità.

Finché questa intestazione è di 77 byte o meno, SendGrid la inoltra invariata. Ma quando il valore raggiunge 78 byte, il loro relay SMTP la riscrive forzatamente utilizzando la sintassi delle parole codificate MIME (RFC 2047). Tale codifica è esplicitamente vietata nelle intestazioni strutturate come List-Unsubscribe.

Ecco cosa invia invece 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?=

Questa codifica interrompe l’analisi dei link di annullamento dell’iscrizione sia in Gmail che in Outlook. Di conseguenza, i destinatari non possono annullare facilmente l’iscrizione tramite gli elementi dell’interfaccia utente, il che può portare a tassi di reclamo più elevati e a un posizionamento inferiore nella posta in arrivo. Peggio ancora, la visualizzazione “Mostra originale” di Gmail decodifica l’intestazione, quindi inizialmente si potrebbe non essere consapevoli della riscrittura.

Questo comportamento viola:

RFC 2047, che proibisce le parole codificate nelle intestazioni strutturate come List-Unsubscribe.

RFC 2369, che definisce la sintassi e la struttura dell’intestazione List-Unsubscribe e presuppone la parsabilità in ASCII semplice.

Un esempio di intestazione list-unsubscribe che Discourse invia è:

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

Ci sono 64 caratteri solo nel token univoco, quindi è garantito che i link di annullamento dell’iscrizione che inviamo supereranno i 77 caratteri.

Non usiamo SendGrid ma so che molti dei nostri self-hoster lo fanno, quindi penso sia importante renderlo noto a tutti qui.

Ci sono utenti SendGrid qui che possono confermare questo comportamento?

8 Mi Piace

Ho una conferma indipendente da @pfaffman (grazie) che sta riscontrando questo comportamento con le email inviate tramite 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

e che il link facile \u003ckbd\u003eAnnulla iscrizione\u003c/kbd\u003e non è presente (il che è negativo).

3 Mi Piace

conferma la stessa lunghezza del token

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

conferma l’assenza dell’immagine di annullamento dell’iscrizione, è presente solo il link

inoltre, gmail accetta costantemente le email di iscrizione di discourse/sendgrid ma o le colloca nello spam o le etichetta come sospette, trattiene le immagini e colloca l’email nella posta in arrivo