如何以编程方式从退回电子邮件列表中删除电子邮件?

How to programmatically delete an email from list of bounced emails?

我正在开发基于 GAE(Google App Engine)的 python 应用程序,其中集成了 sendgrid python SDK(v3.2.10)。我现在正在尝试做的是,每当 sendgrid 推送类型为 "bounce" 的事件 webhook 时,我想从 sendgrid 上存在的退回电子邮件列表中删除该退回电子邮件。

我已经阅读了官方网站上提供的文档。首先,我尝试使用 SDK 删除电子邮件地址,它在本地主机上运行良好。但是在将它部署到实时服务器之后,它什么也没做,属于例外条款。

代码片段:

try:
    send_grid_client = sendgrid.SendGridAPIClient(apikey=SENDGRID_API_KEY)
    data = {"emails": [email.strip()]}
    delete_response = send_grid_client.client.suppression.bounces.delete(
                                    request_body=data)
except Exception as exception:
    logging.info('Exception is: {}'.format(exception))
    pass

由于它没有按预期工作,我现在正尝试使用 REST API 来做同样的事情。

代码片段:

import requests
data = {"emails": [email]}
headers = {"Authorization": "Bearer {}".format(SENDGRID_API_KEY)}
delete_response = requests.delete("https://api.sendgrid.com/v3/suppression/bounces", data=json.dumps(data), headers=headers)
logging.info(delete_response)
logging.info(delete_response.status_code)
logging.info(delete_response.text)

现在,sendgrid API 不断返回错误 400 和消息 {"errors":[{"field":null,"message":"emails or delete_all params required"}]}。我根本不知道如何解决这个问题。也许我错过了如何在 delete 函数中传递请求正文,但是,我无法弄清楚。

我刚刚弄清楚了这个问题。

是 SendGrid API 文档 here 引起了混淆,因为没有明确提到当您要删除单个电子邮件地址或列表时,它们有不同的调用相同端点的方式电子邮件。

对于单个电子邮件,需要在 URL 中传递,即 https://api.sendgrid.com/v3/suppression/bounces/{email_address}

对于电子邮件列表,需要在删除请求的正文中传递该列表。即它看起来像这样 {"emails": [email_address_1, email_address_1, ...]}

正如上面的问题一样,一封电子邮件本来是要删除的,它在删除请求中作为 {"emails": [email_address_1]} 传递。 Sendgrid API 无法消化此信息并抛出错误。电子邮件地址将在 URL.

中传递

此问题已解决。但是,我想知道为什么 Sendgrid API 无法消化此信息 {"emails": [email_address_1]}。为什么他们硬性假设列表中的元素总是大于 1。