SendGrid无法将列表取消订阅电子邮件标头传递到Yahoo和Outlook

问题描述

我正在尝试使用python使用SendGrid Api发送电子邮件。我已经处理过如何在发送电子邮件添加list-unsubscribe标头,并且我已经成功完成了此操作,gmail仅获得了unsubscribe标头。我收到有关Yahoo,Outlook的电子邮件,但没有取消订阅标头。

在这是我一直在做的,您会注意到一个额外的代码,我在mailto url中添加 subject ,并传递了一个编码字符串(这是必需的)。

{
  "personalizations": [
    {
      "to": [
        {
          "email": "example@example.com"
        }
      ],"subject": "Your subject line here"
    }
  ],"from": {
    "email": "example@example.com"
  },"headers": {
    "List-Unsubscribe": "<mailto:unsubscribeexampexample@example.com?subject=unsubscribe:encoded_string>,<http://www.unsubscribe.example.com>"
  }
}

在这里,endode_string最初是一个查询字符串,其中包含id,用户和其他需要取消订阅人的信息。 为了进行编码,我们使用以下代码。 message:string是我们编码的内容

cipher = AES.new(cipher_secret_key.encode(),AES.MODE_ECB)
encoded = base64.b64encode(cipher.encrypt(message.encode()))

给出了加密的输出

bYFgnNbtHMbI6nO8dWBPpuYhEKPHI5H0m4ufZCWoL1g~|eyAicmNwdF90byI6ICJtdW5lZWIuNjVoYXNzYW5AZ21haWwuY29tIiwgInRlbmFudF9pZCI6ICJjb3Vyc2VyYSIsICJjdXN0b21lcl9pZCI6ICIxIiwgIm1lc3NhZ2VfaWQiOiaimDA0MDdmMzM0NDVmogIwODA1ZTAiLCAic3ViYWNjb3VudF9pZCI6ICIwIiB9

这就是往南走的地方,gmail可以,但是yahoo和Outlook不是。 您可以查看Gmail和Yahoo处理退订标头的区别 YahooGmail

我将继续粘贴Yahoo Raw Message输出

List-Unsubscribe: 
 =?us-ascii?Q?=3Cmailto=3Abcsf15m021=40pucit=2Eedu=2Epk=3FO=3Dunsubscribe=3AbYFgnNbtHMbI6nO8?=
 =?us-ascii?Q?dWBPpuYhEKPHI5H0m4ufZCWoL1g~|eyAicmNwdF?=
 =?us-ascii?Q?90byI6ICJtdW5lZWIuNjVoYXNzYW5AZ21haWwuY?=
 =?us-ascii?Q?29tIiwgInRlbmFudF9pZCI6ICJjb3Vyc2VyYSIs?=
 =?us-ascii?Q?ICJjdXN0b21lcl9pZCI6ICIxIiwgIm1lc3NhZ2V?=
 =?us-ascii?Q?faWQiOiaimDA0MDdmMzM0NDVmogIwODA1ZTAiLC?=
 =?us-ascii?Q?Aic3ViYWNjb3VudF9pZCI6ICIwIiB9=3E?=

问题,它受到干扰,您会注意到 3C

解决方法

您看到的编码是正常的,应该不会引起问题。它也发生在 Gmail 中,但 Gmail 习惯于在将其显示给您之前对其进行解码。如果您转到“显示原件”>“下载原件”,您将看到此内容。

我不清楚您遇到的实际问题是什么。如果只是这种编码,则无需担心。