3

我正在尝试使用 python 使用 SendGrid Api 发送电子邮件。我已经处理了如何在发送电子邮件时添加列表取消订阅标头,并且我已经成功地这样做了,gmail 仅获取取消订阅标头。我在 yahoo、outlook 上收到电子邮件,但没有退订标题。

现在这就是我一直在做的事情,你会注意到一个额外的代码,我在 mailto url 中添加主题并传递一个编码字符串,这是一个要求。

{
  "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 原本是一个查询字符串,包含 ids、user 和其他需要取消订阅一个人的信息。为了编码,我们使用以下代码。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是十六进制的 < [小于号]。可能是什么原因造成的?雅虎邮件服务器是否需要包含某些字符的字符串。我进行了实验并输入了最多 24 个字符,并且标题正在为 Yahoo 接收,遗憾的是超过了这个限制,它开始像我上面发布的那样生成输出。

4

1 回答 1

0

您看到的编码是正常的,不会引起问题。它也发生在 Gmail 中,但 Gmail 习惯于在将其显示给您之前对其进行解码。如果你去 Show Original > Download Original 你会看到这个。

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

于 2021-05-12T13:13:49.887 回答