如何修复ConnectionRefusedError:[WinError 10061]目标计算机主动拒绝它?(Django电子邮件)

2024-06-16 09:38:33 发布

您现在位置:Python中文网/ 问答频道 /正文

How to fix [WinError 10061] with Django e.mails?

(No connection could be made because the target machine actively refused it)



我用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)

^{pr2}$

2)

关闭防火墙/防病毒

3)

在pythonshell和Django应用程序中运行代码

4)

我从nslookup MX查询中得到了smtp服务器

我在pythonshell中运行这个测试代码:

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()



预期结果

现在我想从本地主机Django应用程序发送电子邮件。 以后我会把代码上传到pythonanwhere.com服务器。在

谢谢 詹姆


Tags: djangoinpycoreselfliblinemail
2条回答

[FIXED] Here is my Django code to send e.mails:

(about 12 hours later...)



1) 我缺少配置设置.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) pythonshell与Django shell不同

我在pythonshell中测试代码。 正确的做法是打电话:

^{pr2}$

而不是python

Sending the e.mail


(在你拥有设置.py文件配置)

您可以打开Django shell并复制代码或在Django中编写 `视图.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、 邮件有时会进入“垃圾邮件”文件夹


谢谢 詹姆

EMAIL_*值需要在设置模块中,而不是脚本中。如果没有这些值,处理消息发送的EmailBackend类默认为尝试连接到localhost:25。因为您没有在本地系统上运行SMTP服务器,所以它拒绝连接。在

您不需要EMAIL_BACKEND值,因为它是默认值,但是将其他EMAIL_*值移到您的设置模块中。在

相关问题 更多 >