Джанго отправка электронной почты - PullRequest
31 голосов
/ 02 августа 2011

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

Я получаю эту ошибку: [Errno 111] Connection refused, когда я пытаюсь отправить электронное письмо

Здесь я создаю письмо и пытаюсь отправить его в моем представлении:

try:
    msg = EmailMessage(subject, message, from_email, [receiver])
    msg.content_subtype = "html"
    msg.send()

Мой файл настроек выглядит следующим образом:

EMAIL_HOST = "localhost"
DEFAULT_FROM_EMAIL = "myemail@gmail.com"
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', 'myemail@gmail.com', ['myemail@gmail.com'])
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

Мне просто кажется, что я ничего с этим не получаю.Любая помощь или совет будет высоко ценится.Спасибо

Кроме того, если вы хотите что-то еще увидеть, просто прокомментируйте это.

Ответы [ 7 ]

69 голосов
/ 02 августа 2011

Вы пытаетесь использовать учетную запись Gmail?Может быть, попробуйте это тогда:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your-username@gmail.com'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

Затем попробуйте проверить (django <1.4) на </p>

python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', to=['test@email.com'])

А если вы используете django 1.4, используйте это:

python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', 'your@email.com', ['test@email.com'])

Если вы не используете учетную запись Gmail и у вас по-прежнему возникают проблемы, попробуйте добавить EMAIL_HOST_USER и EMAIL_HOST_PASSWORD к тому, что у вас есть.Если у вас все еще есть проблемы, возможно, ваша сеть блокирует вас.Брандмауэры в вашей ОС или маршрутизаторе.

Спасибо knite за обновленный синтаксис.Скиньте ему + 1 и спасибо pranavk за сообщение об изменении синтаксиса в django 1.4

36 голосов
/ 01 мая 2014

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

  1. Перейдите на страницу безопасности аккаунта 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 = 'your-username@gmail.com'
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', 'your@email.com', ['toemail@email.com'],
     fail_silently=False)
17 голосов
/ 21 июля 2012

@ mongoose_za имеет отличный ответ, но синтаксис в Django 1.4 + немного отличается.

Вместо:

send_mail('test email', 'hello world', to=['test@email.com'])

используйте

send_mail('test email', 'hello world', 'your@email.com', ['test@email.com'])

Требуются первые четыре аргумента: subject, message, from_email и receiveient_list.

4 голосов
/ 16 ноября 2012
  1. Включить pop3 в настройках Gmail.
  2. создать специальный пароль для этого приложения django. (http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833)
3 голосов
/ 19 января 2012

Я бы не использовал GMail. Он будет работать для нескольких писем, но после этого вы можете обнаружить, что все ваши письма отклоняются или спам-банками. Я использовал сервис Amazon SES с Django-SES, чтобы решить эту проблему.

1 голос
/ 06 декабря 2014

В settings.py, используйте smtp в качестве бэкэнда и не консоль

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
0 голосов
/ 14 июня 2012

поместите следующие минимальные настройки в файл settings.py или local_settings.py на вашем сервере.

EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

Вместо использования smtp.gmail.com, который накладывает много ограничений, вы можете иметь свой собственный почтовый сервер.

Вы можете сделать это, установив свой собственный почтовый сервер:

sudo apt-get install sendmail
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...