我正在尝试使用 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 处理退订标头 Yahoo与Gmail的区别
我将继续粘贴 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 接收,遗憾的是超过了这个限制,它开始像我上面发布的那样生成输出。