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

Сначала создайте пароль для приложения

  1. Посетите страницу безопасности своего аккаунта Google. И нажмите двухэтапную проверку: enter image description here

  1. Нажмите App passwords на странице безопасности аккаунта Google: enter image description here

  1. Создайте App, выберите Mail и дайте имя: enter image description here

  1. Запишите 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