Как исправить ConnectionRefusedError: [WinError 10061] целевая машина активно отказалась от него? (Django e.mails) - PullRequest
2 голосов
/ 29 марта 2019

Как исправить [WinError 10061] с помощью Django e.mails?

(Нет соединение может быть установлено, потому что целевой компьютер активно отказался это)



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



При отправке электронного письма появляется следующая ошибка:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\site- 
packages\django\core\mail\message.py", line 291, in send
return self.get_connection(fail_silently).send_messages([self])
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\site- 
packages\django\core\mail\backends\smtp.py", line 103, in send_messages
new_conn_created = self.open()
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\site- 
packages\django\core\mail\backends\smtp.py", line 63, in open
self.connection = self.connection_class(self.host, self.port, 
**connection_params)
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\smtplib.py", line 251, 
in __init__
(code, msg) = self.connect(host, port)
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\smtplib.py", line 336, 
in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\smtplib.py", line 307, 
in _get_socket
self.source_address)
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\socket.py", line 727, 
in create_connection
raise err
File "C:\Users\Jaime\Miniconda3\envs\mydjango\lib\socket.py", line 716, 
in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] No connection could be made 
because 
the target machine actively refused it

Вот что я пробовал:

1)

import socket
socket.getaddrinfo('hotmail-com.olc.protection.outlook.com', 80)
socket.getaddrinfo('smtp.hotmail.com', 8000)
socket.getaddrinfo('smtp.hotmail.com', 587)

2)

Отключить брандмауэр / антивирус

3)

Запустите код в оболочке Python и в приложении Django

4) * * тысяча тридцать-пять У меня сервер smtp из MX-запроса nslookup

Я запускаю этот тестовый код в оболочке python:

from django.conf import settings
from django.core.mail import EmailMessage
settings.configure()

from django.core.mail import send_mail

import socket
socket.getaddrinfo('hotmail-com.olc.protection.outlook.com', 80)

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'hotmail-com.olc.protection.outlook.com'
EMAIL_HOST_USER = '*******@hotmail.com'
EMAIL_HOST_PASSWORD = '******'
EMAIL_PORT = 587

mail_subject = 'Activate your blog account.'


to_email = "******@hotmail"
email = EmailMessage(
    mail_subject, "hello", to=[to_email]
)
email.send()



Ожидаемый результат

Сейчас я хочу отправлять электронные письма из приложения localhost Django. В будущем я буду загружать код на сервер pythonanywhere.com.

Спасибо Jaime

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

[FIXED] Вот мой код Django для отправки электронных писем:

(примерно через 12 часов ...)



1) Мне не хватало конфигураций в settings.py

settings.py

DEFAULT_FROM_EMAIL = 'admin@********.com'
SERVER_EMAIL = 'admin@********.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'mail.********.com'
EMAIL_HOST_USER = 'admin@********.com'
EMAIL_HOST_PASSWORD = '*******'
EMAIL_PORT = 587


2) Конфигурации Windows

Это не имеет ничего общего с:

  • Firewall
  • Антивирусное

3) Я не был уверен насчет имени SMTP-сервера

  • Убедитесь, что у вас есть правильные учетные данные в settings.py
  • Мой hotmail не работал в конце. Мне пришлось использовать электронную почту, предоставляемую хост-службами.

4) Оболочка Python отличается от оболочки Django

Я тестировал код в оболочке python. Правильно было позвонить:

python manage.py shell

вместо просто python

Отправка электронной почты


(После того, как вы настроили файл settings.py)

вы можете либо открыть оболочку Django и скопировать код, либо написать в Django `views.py` файл определенного вида


from django.core.mail import EmailMessage

mail_subject = 'Active a sua conta.'
message = "message"
to_email = "jaimedcsilva@hotmail.com"

email = EmailMessage(
    mail_subject, message,to=[to_email]
)
email.send()



Стоит упомянуть:

  • Не работает с портом 465
  • E-mail иногда переходит в папку нежелательной почты




Спасибо Jaime

0 голосов
/ 29 марта 2019

Значения EMAIL_* должны быть в вашем модуле настроек, а не в вашем скрипте.Без этих значений класс EmailBackend, который обрабатывает отправку сообщения, по умолчанию пытается подключиться к localhost:25.Поскольку вы не используете SMTP-сервер в своей локальной системе, он отказывается от соединения.

Вам не нужно значение EMAIL_BACKEND, потому что это значение по умолчанию, но перенесите другие значения EMAIL_* в своймодуль настроек.

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