Как программно удалить письмо из списка отклоненных писем?
Я работаю над приложением Python для GAE(Google App Engine), в которое встроен SDG sendgrid python (v3.2.10). То, что я пытаюсь сделать, это прямо сейчас, что всякий раз, когда sendgrid нажимает на событие webhook типа "bounce", я хочу удалить это отклоненное письмо из списка отклоненных сообщений, присутствующих на sendgrid.
Я уже просмотрел документацию, представленную на официальном сайте. Сначала я попытался удалить адрес электронной почты с помощью SDK, и он работал нормально на localhost. Но после его развертывания на работающем сервере он просто ничего не делает и попадает в положение об исключении.
Фрагмент кода:
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
функция, но я не мог понять это.
1 ответ
Я только что понял проблему.
Это документы API SendGrid, которые вызывают путаницу, так как не указано, что они по-разному называют одну и ту же конечную точку, когда вы хотите удалить один адрес электронной почты или список адресов электронной почты.
Для одного письма оно должно быть передано в URL, т.е. https://api.sendgrid.com/v3/suppression/bounces/{email_address}
Для списка электронных писем этот список необходимо передать в теле запроса на удаление. то есть это будет выглядеть так {"emails": [email_address_1, email_address_1, ...]}
Как и в предыдущем вопросе, одно электронное письмо должно было быть удалено, и оно передавалось как {"emails": [email_address_1]}
в запросе на удаление. API Sendgrid не смог переварить эту информацию и выдал ошибку. Адрес электронной почты должен был быть передан в URL.
Проблема была решена. Но мне интересно, почему Sendgrid API не смог переварить эту информацию {"emails": [email_address_1]}
, Почему у них сложное предположение, что в списке всегда будут элементы больше одного.