Не удается настроить Django для работы с smtp.gmail.com

#python #django #smtp

#python #django #smtp

Вопрос:

Я пытался заставить django работать с smtp-сервером gmail для отправки писем, но я всегда получаю эту обратную трассировку. Любая помощь будет высоко оценена.

—— settings.py ——

 EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'user@gmail.com'

EMAIL_HOST_PASSWORD = 'your-password'

EMAIL_PORT = 587

EMAIL_USE_TLS = True
  

—- оболочка python ——

из django.core.mail импортируйте EmailMessage

email = EmailMessage(‘Тест почты’, ‘Это тест’, to=[‘somemail@something.com ‘])

email.send()

 Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/message.py", line 251, in send
return self.get_connection(fail_silently).send_messages([self])
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 86, in send_messages
sent = self._send(message)
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 104, in _send
email_message.message().as_string())
File "/usr/local/lib/python2.7/smtplib.py", line 701, in sendmail
raise SMTPSenderRefused(code, resp, from_addr)
SMTPSenderRefused: (530, '5.7.0 Must issue a STARTTLS command first. z15sm10449686anl.15', 'webmaster@localhost')
  

Редактировать: новые ошибки при внесении изменений, предложенных unni. Оболочка не будет выполняться, и я получаю это сообщение об ошибке

 **EMAIL_HOST_USER  = 'some.account@gmail.com'**
 ^
SyntaxError: invalid syntax
  

Комментарии:

1. Это прямой C P настроек?

2. ну, на самом деле это не имя учетной записи и пароль, а остальное — C p

3. Они отображаются при запуске Django REPL?

4. Я не уверен, как это проверить, пытаясь выяснить прямо сейчас

5. Запустите оболочку, импортируйте django.conf.settings и посмотрите, существует ли она.

Ответ №1:

Измените свои настройки следующим образом :

 EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'user'

EMAIL_HOST_PASSWORD = 'your-password'

EMAIL_PORT = 587

EMAIL_USE_TLS = True
  

Тогда попробуй:

 python manage.py shell
>>> from django.core.mail import EmailMessage
>>> email = EmailMessage('Mail Test', 'This is a test', to=['somemail@something.com'])
>>> email.send()
  

Это должно вернуться со статусом 1, что означает, что это сработало.

Комментарии:

1. Я только что добавил сообщение об ошибке, которое это выдает, к моему первоначальному вопросу

2. @la_f0ka Я просто хотел подчеркнуть, что строка не использует ** в файле настроек. Я отредактировал приведенный выше код. Пожалуйста, попробуйте еще раз.

3. Это правильный ответ! Текущий принятый ответ (для изменения порядка EMAIL_USE_TLS = True ) неверен.

Ответ №2:

Я недавно настроил это, и у меня был немного другой settings.py конфигурация.

Переместить:

 EMAIL_USE_TLS = True 
  

вверху над EMAIL_HOST

Добавить:

 DEFAULT_FROM_EMAIL = 'user@gmail.com'
SERVER_EMAIL = 'user@gmail.com'
  

Комментарии:

1. не имеет значения, где EMAIL_USE_TLS находится по отношению к другим настройкам. Все это выполняется одним махом

2. @Sheena Но этот ответ получил 6 голосов. Означает, что в нем что-то есть

Ответ №3:

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

Я нашел решение по адресу: https://support.google.com/accounts/answer/185833?hl=en и наконец https://security.google.com/settings/security/apppasswords

Если вы тестируете свой проект на локальном компьютере, вам следует перейти по последней ссылке и включить «Доступ для менее защищенных приложений».

Комментарии:

1. Это должен быть одобренный ответ. Спасибо

Ответ №4:

 EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
EMAIL_HOST='smtp.gmail.com'
EMAIL_PORT=465
EMAIL_HOST_USER = 'youruser'
EMAIL_HOST_PASSWORD = '*********'
DEFAULT_EMAIL_FROM = 'youremail@gmail.com'
  

работает нормально

Ответ №5:

вы должны перейти по этой ссылке https://www.google.com/settings/u/2/security/lesssecureapps?pageId=none и включите доступ для менее защищенных приложений

эта опция позволяет django получать доступ к вашей электронной почте и отправлять электронную почту через нее.