Как программно удалить письмо из списка отклоненных писем?

Я работаю над приложением 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]}, Почему у них сложное предположение, что в списке всегда будут элементы больше одного.

Другие вопросы по тегам