Я знаю, что есть 20 вопросов, похожих на мои, но я пробовал больше дня, чтобы получить электронную почту для работы с Django.
Я получаю эту ошибку: [Errno 111] Connection refused
, когда я пытаюсь отправить электронное письмо
Здесь я создаю письмо и пытаюсь отправить его на мой взгляд:
try:
msg = EmailMessage(subject, message, from_email, [receiver])
msg.content_subtype = "html"
msg.send()
Мой файл настроек выглядит следующим образом:
EMAIL_HOST = "localhost"
DEFAULT_FROM_EMAIL = "[email protected]"
EMAIL_PORT = 25
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
Я пробовал делать отправку теста с помощью python -m smtpd -n -c DebuggingServer localhost:1025
и имел успех, но когда дело доходит до того, чтобы делать это по-настоящему, без успеха.
Когда я пытаюсь выполнить send_mail из оболочки, я получаю эту трассировку:
>>> from django.core.mail import send_mail
>>> send_mail('Test', 'Test', '[email protected]', ['[email protected]'])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/__init__.py", line 61, in send_mail
connection=connection).send()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/message.py", line 251, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 79, in send_messages
new_conn_created = self.open()
File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 42, in open
local_hostname=DNS_NAME.get_fqdn())
File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.6/socket.py", line 561, in create_connection
raise error, msg
error: [Errno 111] Connection refused
Кажется, я ничего не могу с этим поделать. Любая помощь или совет будут высоко оценены. Благодаря
Кроме того, если есть что-то еще, что вы хотели бы видеть, просто прокомментируйте это.
Вы пытаетесь использовать учетную запись gmail? Возможно, попробуйте следующее:
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Затем попробуйте выполнить тест (django < 1.4) на
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', to=['[email protected]'])
И если вы используете django 1.4, используйте это:
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])
Если вы не используете учетную запись gmail и все еще получаете проблемы, просто попробуйте добавить EMAIL_HOST_USER
и EMAIL_HOST_PASSWORD
к тому, что у вас есть.
Если у вас все еще есть проблемы, возможно, ваша сеть блокирует вас. Брандмауэры на вашей ОС или маршрутизаторе.
Благодаря knite для обновленного синтаксиса. Бросьте ему +1 и спасибо pranavk за то, что он дал мне знать о синтаксическом изменении в django 1.4
2-Step Verification
нажмите Settings
(если ссылка отсутствует, вы можете создать новую, вы можете пропустить шаги 3 и 4).App-specific passwords
.Manage your application specific passwords
.Application-specific passwords
введите описательное имя для приложения, которое вы хотите разрешить, например "Django gmail", затем нажмите кнопку Generate application-specific password
.smbumqjiurmqrywn
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'Application spectific password(for eg: smbumqjiurmqrywn)'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('Test', 'This is a test', '[email protected]', ['[email protected]'],
fail_silently=False)
@mongoose_za имеет отличный ответ, но синтаксис немного отличается от Django 1.4 +.
Вместо:
send_mail('test email', 'hello world', to=['[email protected]'])
использование
send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])
Первые четыре аргумента необходимы: тема, сообщение, from_email и recipient_list.
Я бы не стал использовать GMail. Он будет работать для нескольких электронных писем, но после этого вы обнаружите, что все ваши электронные письма отклонены или защищены от спама. Я использовал сервис Amazon "SES" с Django-SES, чтобы решить эту проблему.
В settings.py, используйте smtp как серверный и не консольный
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
введите следующие минимальные настройки в файл settings.py или local_settings.py на свой сервер.
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
вместо использования smtp.gmail.com, который накладывает множество ограничений, вы можете иметь свой собственный почтовый сервер.
вы можете сделать это, установив свой собственный почтовый сервер:
sudo apt-get install sendmail