#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 получать доступ к вашей электронной почте и отправлять электронную почту через нее.