Django отправляет электронную почту
Я знаю, что есть 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
Кажется, я ничего не могу с этим поделать. Любая помощь или совет будут высоко оценены. Благодаря
Кроме того, если есть что-то еще, что вы хотели бы видеть, просто прокомментируйте это.
Ответы
Ответ 1
Вы пытаетесь использовать учетную запись 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
Сначала создайте пароль для приложения
- Посетите страницу безопасности своего аккаунта Google. И нажмите двухэтапную проверку:
![enter image description here]()
- Нажмите
App passwords
на странице безопасности аккаунта Google: ![enter image description here]()
- Создайте
App
, выберите Mail
и дайте имя: ![enter image description here]()
- Запишите
App Password
: ![enter image description here]()
Затем добавьте соответствующие значения в settings.py:
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)
Ответ 3
@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.
Ответ 4
- Включить pop3 в настройках gmail.
- создать специальный пароль для данного приложения django. (Http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833)
Ответ 5
Я бы не стал использовать GMail. Он будет работать для нескольких электронных писем, но после этого вы обнаружите, что все ваши электронные письма отклонены или защищены от спама. Я использовал сервис Amazon "SES" с Django-SES, чтобы решить эту проблему.
Ответ 6
В settings.py, используйте smtp как серверный и не консольный
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Ответ 7
введите следующие минимальные настройки в файл settings.py или local_settings.py на свой сервер.
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
вместо использования smtp.gmail.com, который накладывает множество ограничений, вы можете иметь свой собственный почтовый сервер.
вы можете сделать это, установив свой собственный почтовый сервер:
sudo apt-get install sendmail