На моем рабочем сервере я получаю сообщение об ошибке ниже
"в этом() получил неожиданный ключевой аргумент "apikey""
Тот же код на сервере разработки работает.
На моем рабочем сервере работает gunicorn, и я добавил переменную среды SENDGRID_API_KEY в файл gunicorn.service. Я перезапустил gunicorn и nginx. Я вижу, что переменная окружения загружена.
Метод, который я вызываю для отправки электронной почты, приведен ниже:
def sendtestemail(to):
sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
from_email = Email("<myemail>@<mydomain>.com")
to_email = Email(to)
subject = "Sending with SendGrid is Fun"
content = Content("text/plain", "and easy to do anywhere, even with Python")
mail = Mail(from_email, subject, to_email, content)
response = sg.client.mail.send.post(request_body=mail.get())
return [response.status_code, response.body, response.headers]
Привет, это находится в файле gunicorn.service, и я установил его с помощью "-e SENDGRID_API_KEY=<THE API KEY>. Я знаю, что это может быть не идеально, но просто пытаюсь заставить это работать, поскольку это не так, если я попробуйте сослаться на файл.
Хм, я не уверен в этой настройке, но я делаю это, добавляя свой SENDGRID_API_KEY в мой файл настроек, from projectroot.settings import SENDGRID_API_KEY, а затем добавляя эту переменную в ваш объект sg. Я предполагаю, что os.environ не получает вашу переменную так, как вы ее установили. Этого словарного ключа точно нет в моей настройке.
Спасибо за ответ, я тоже только что попробовал, но, к сожалению, получаю ту же ошибку.
Я обнаружил, что сервер разработки имеет версию 5.6.0, а рабочий сервер — версию 6.0.4. Я думаю, что это связано с этим. Если я изменю имя аргумента «apikey» на «api_key», я получу другую ошибку. Затем я получаю сообщение об ошибке: «Объект типа« Электронная почта »не является сериализуемым JSON», что предполагает, что он принимает первую строку кода. Возможно, эта функция устарела, но я проверил документацию на sendgrid.com/docs/for-developers/sending-email/…, и она такая, как я написал. Я связался со службой поддержки SendGrid, чтобы спросить.






Проблема возникает из-за критического изменения, внесенного в sendgrid 6.0. Аргумент ключевого слова для apikey был удален и заменен позиционным аргументом.
Чтобы разрешить ваш пример, удалите apikey= из ваших аргументов и просто передайте api_key в качестве позиционного аргумента.
sg = sendgrid.SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
Это может немного сбивать с толку, если оглянуться на все предыдущие примеры, а также на документацию GitHub, но этот пример в официальной документации все правильно понимает.
Примечание. Я вижу, что на момент, когда вы задавали свой вопрос, вы действительно правильно следовали документации, которую я указал выше. Есть несколько открытых вопросов, где документация долгое время оставалась неточной, но была устранена еще в мае.
Спасибо, это старый вопрос, но я полагаю, что понял, что API изменился в этой версии, а документация не обновлялась. Я отмечу это как ответ.
Где находится ваш
SENDGRID_API_KEY??? Я в значительной степени уже знаю ответ, но просто хочу убедиться, прежде чем отвечать.