Джанго отправка электронной почты

Я знаю, что у меня есть 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

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

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

8 ответов

Решение

Вы пытаетесь использовать учетную запись 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)

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

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

  1. Посетите страницу безопасности своего аккаунта Google.
  2. в 2-Step Verification окно, нажмите Settings (если нет ссылки на настройки, вы можете создать новую. Вы можете пропустить шаги 3 и 4).
  3. Нажмите на вкладку для App-specific passwords,
  4. Нажмите Manage your application specific passwords,
  5. Под Application-specific passwords введите описательное имя для приложения, которое вы хотите авторизовать, например, "Django gmail", затем нажмите Generate application-specific password кнопка.
  6. запишите пароль. например: smbumqjiurmqrywnпароль

Затем добавьте соответствующие значения в 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)

У @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'])

Требуются первые четыре аргумента: тема, сообщение, from_email и receient_list.

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

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

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

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

Сначала настройте переменные серверной части электронной почты в файле settings.py.

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

Затем создайте объект электронной почты для отправки писем.

      from django.core import mail

connection = mail.get_connection() # Manually open the connection 
connection.open() # Construct an email message that uses the connection 
email = mail.EmailMessage( 'Hello', 'Body goes here', 'from@example.com', ['to1@example.com'], connection=connection, ) 
email.send() # Send the email
connection.close()

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

EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

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

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

sudo apt-get install sendmail
Другие вопросы по тегам