簡體   English   中英

如何修復 ConnectionRefusedError: [WinError 10061] 目標機器主動拒絕它? (Django 電子郵件)

[英]How to fix ConnectionRefusedError: [WinError 10061] the target machine actively refused it? (Django e.mails)

如何使用 Django 電子郵件修復 [WinError 10061]?

(由於目標機器主動拒絕,無法建立連接)



我正在使用 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 shell 和 Django 應用程序中運行代碼

4)

我從 nslookup MX 查詢中獲得了 smtp 服務器

我在 python shell 中運行這個測試代碼:

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 服務器。

謝謝海梅

[已修復] 這是我發送電子郵件的 Django 代碼:

(大約 12 小時后...)



1) 我在 settings.py 中缺少配置

設置.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 配置

它與以下無關:

  • 防火牆
  • 殺毒軟件

3) 我不確定 SMTP 服務器的名稱

  • 確保您在settings.py擁有正確的憑據
  • 我的hotmail最后沒有用。 我不得不使用主機服務提供的電子郵件。

4) Python shell 與 Django shell 不同

我正在 python shell 中測試代碼。 正確的做法是調用:

python manage.py shell

而不僅僅是python

發送電子郵件


(在您配置好 settings.py 文件之后)

您可以打開 Django shell 並復制代碼或在 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
  • 電子郵件有時會進入垃圾文件夾




謝謝海梅

EMAIL_*值需要在您的設置模塊中,而不是在您的腳本中。 如果沒有這些值,處理發送消息的EmailBackend類將默認嘗試連接到localhost:25 由於您沒有在本地系統上運行 SMTP 服務器,因此它拒絕連接。

您不需要EMAIL_BACKEND值,因為它是默認值,但將其他EMAIL_*值移動到您的設置模塊中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM