Не удалось пройти проверку SendGrid с помощью Django

В настоящее время я читаю книгу по Django (для начинающих), и я достиг точки, когда мне нужно реализовать функцию сброса пароля на тестовом веб-сайте, используя SendGrid Ретранслятор SMTP.

После создания учетной записи и начала создания ретранслятора SMTP я приветствовал следующий экран: Экран инструкций SendGrid SMTP На основе этой страницы я добавил следующие строки кода в свой setting.py< /em> файл:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey'
EMAIL_HOST_PASSWORD = 'xxxxx' #the string which is partialy hidden under the pink square 
EMAIL_PORT = 587
EMAIL_USE_TLS = True

После запуска веб-сайта и попытки сбросить свой пароль (пароль суперпользователя) я получаю желаемое сообщение со ссылкой для сброса в моей консоли, но, к сожалению, на мою электронную почту ничего не приходит. Таким образом, я получаю следующее сообщение об ошибке при попытке проверить интеграцию. Сообщение об ошибке


Что я пробовал до сих пор:

  • Я попытался создать несколько разных ключей API, чтобы убедиться, что с ключом API все в порядке.
  • Я создал новую учетную запись SendGrid
  • Я попытался удалить EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' из файла settings.py (это только ухудшило ситуацию)

Я пытаюсь решить эту проблему уже более суток, любая помощь будет принята с благодарностью!


person Nazim Kerimbekov    schedule 27.01.2019    source источник
comment
Не размещайте конфиденциальные пароли на SO! Ваша учетная запись sendgrid не открыта для использования в качестве почтового провайдера.   -  person dirkgroten    schedule 27.01.2019
comment
@dirkgroten большое спасибо за беспокойство :) Перед написанием этого поста я уже отключил ключ API   -  person Nazim Kerimbekov    schedule 27.01.2019
comment
@dirkgroten сказал, что я тоже только что удалил API из фотографий.   -  person Nazim Kerimbekov    schedule 27.01.2019
comment
Это из вашей локальной среды разработки или из производственной среды?   -  person dirkgroten    schedule 27.01.2019
comment
@dirkgroten Я запускаю код, используя python manage.py runserver, поэтому я запускаю его локально.   -  person Nazim Kerimbekov    schedule 27.01.2019


Ответы (2)


В настройках вашего сервера электронной почты настроено использование консоли. Если вы просто отлаживаете, это нормально, вы можете увидеть, как будут выглядеть электронные письма в консоли, и скопировать оттуда ссылку для сброса пароля.

Если вы действительно хотите отправить электронное письмо, используйте серверную часть SMTP: установите EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'.

Но будьте осторожны, не отправляйте электронные письма на поддельные адреса, используя это, у вас будут проблемы, если у вас будет слишком много отказов на вашей учетной записи sendgrid.

Кроме того, если вы собираетесь использовать SendGrid в рабочей среде, используйте API вместо SMTP. django-anymail (но есть и другие пакеты) предоставляет серверную часть для использования API.

Обновление от июня 2021 г. Sendgrid больше не разрешает простую аутентификацию по имени пользователя и паролю (и заставляет вас входить в систему с 2FA). Вам следует использовать API или создать пароль приложения специально для вашего сервера и использовать его вместо обычного пароля.

person dirkgroten    schedule 27.01.2019
comment
Отлично, сработало большое спасибо. Да, я знаю об API, я просто правильно тестирую версию SMTP. что странно, так это то, что я вижу увеличение количества электронных писем в SendGrid прямо сейчас, но, похоже, я не получаю эти электронные письма. - person Nazim Kerimbekov; 27.01.2019

Я бы сказал, что настройки такие, какими они должны быть, принимая во внимание, что вы, конечно, не собираетесь запускать производство без защиты вашей информации (т.е. создания переменных среды). Я предполагаю, что вы собираетесь это сделать, но если нет, вам действительно следует подумать об этом.

Кроме того, это ваши фактические настройки, вы должны отредактировать этот пост прямо сейчас. Они должны храниться в секрете, иначе скоро у вас будет очень плохой день.

Учитывая характер вашей проблемы, я наполовину ожидаю, что вы не тестируете ее в настройках разработки, а скорее пытаетесь запустить ее в рабочей среде. Я также подозреваю, что вы используете Pythonanywhere или Heroku с бесплатной учетной записью. Дайте мне знать, если я ошибаюсь здесь :)

Суть в том, что без этих 5 долларов эти два провайдера (и другие провайдеры, как я полагаю, прибавляют) не позволят вам использовать sendgrid.

Если я ошибаюсь, я был бы признателен за просмотр views.py, который обрабатывает отправку электронной почты.

person Puto Miké    schedule 27.01.2019
comment
Большое спасибо за быстрый ответ. Я уже отключил эти ключи перед написанием этого поста (просто чтобы убедиться, что я только что отредактировал их и из вопроса). Я тестирую веб-сайт с помощью python manage.py runserver, поэтому ссылка для сброса выглядит примерно так: 127.0.0.1:8000/users /сброс_пароля . Разве SendGrid не предлагает 100 бесплатных электронных писем в день? - person Nazim Kerimbekov; 27.01.2019
comment
Да, это так. 10 000 в течение 1-го месяца, а затем они снижаются до 100 после этого. - person Puto Miké; 27.01.2019