加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

通过Django发送电子邮件 – WinError 10060连接尝试失败,GetAdd

发布时间:2020-12-16 22:27:16 所属栏目:Python 来源:网络整理
导读:我已经在Windows R2 2012上运行了一个Django实例超过一年,我来到了一个路障.昨天发生了什么事,我不知道它会是什么.在尝试发送电子邮件时,同样的两个错误会在不同时间突然出现: [WinError 10060] A connection attempt failed because the connected party d

我已经在Windows R2 2012上运行了一个Django实例超过一年,我来到了一个路障.昨天发生了什么事,我不知道它会是什么.在尝试发送电子邮件时,同样的两个错误会在不同时间突然出现:

[WinError 10060] A connection attempt failed because the connected
party did not properly respond after a period of time,or established
connection failed because connected host has failed to respond

socket.gaierror: [Errno 11001] getaddrinfo failed

用户可以连接到服务器的IP地址和Django在192.168.1.5:8000上运行的端口,但他们不能再发送电子邮件了.虽然百分比确实如here所述,但很少.

我尝试过的事情

1)This solution

import socket
socket.getaddrinfo('localhost',8000)

由于我正在做python manage.py runserver 192.168.1.5:8000,我添加了IP而没有.

2)我进入防火墙设置并确保端口都很好.在我的Django项目的setting.py文件中声明的SMTP和25.所有这些,入站和出站.

3)我尝试在本地机器上发送东西,它确实有效.我使用其他程序不使用Django发送电子邮件,并且它们在除服务器之外的所有其他计算机上进行处理.所以我知道这不是我的电子邮件服务器.

4)我更改了电子邮件配置以使用我的Gmail帐户,它确实在除服务器之外的所有其他计算机上处??理.所以它必须是环境.

5)编辑http_proxy环境变量

The problem,in my case,was that some install at some point defined
an
environment variable http_proxy on my machine when I had no proxy.
Removing the http_proxy environment variable fixed the problem.

As described here

在我的wsgi.y文件中的Django项目中:

os.environ['http_proxy'] = "http://192.168.1.5:8080"
os.environ['https_proxy'] = "http://192.168.1.5:8080"

6)鉴于这个答案here(有人可以解释我将如何做到django电子邮件功能),我也尝试过这种从解决方案中包装它的方法here

import smtplib
import socks

#socks.setdefaultproxy(TYPE,ADDR,PORT)
socks.setdefaultproxy(socks.SOCKS5,'192.168.1.5',8080)
socks.wrapmodule(smtplib)

smtpserver = 'smtp.live.com'
AUTHREQUIRED = 1 
smtpuser = 'example@hotmail.fr'  
smtppass = 'mypassword'  

RECIPIENTS = 'mailto@gmail.com'
SENDER = 'example@hotmail.fr'
mssg = "test message"
s = mssg   

server = smtplib.SMTP(smtpserver,587)
server.ehlo()
server.starttls() 
server.ehlo()
server.login(smtpuser,smtppass)
server.set_debuglevel(1)
server.sendmail(SENDER,[RECIPIENTS],s)
server.quit()

虽然我不想使用这样的方法,因为我更喜欢使用Django的内置电子邮件服务.

最佳答案
由于您没有更改代码,因此您共享的错误表明这是与网络相关的问题.

这很可能是一个DNS问题.在您的settings.py中,您指定了EMAIL_HOST,我相信它是一个主机名.您需要检查服务器的DNS服务器.

您提到有关检查防火墙设置但是您所做的错误不是检查实际连接.
要解决此问题,您可以使用几个命令行实用程序,如telnet或nslookup.您可以检查是否可以解析主机名:

nslookup smptp.mail_host.com

此命令最有可能失败.

我想指出你在步骤中做错了什么:

1)您已尝试获取您的服务getaddrinfo,您需要在其中放置您的smtp服务器主机名,这将导致相同的错误.套接字是应用层连接的非常原始的部分,你真的不需要深入研究它.

2)检查防火墙设置是否正常.

3)这是一个很好的步骤,表明您的服务器网络连接存在问题.

4)那是另一个证据:)

5)如果您的网络上有代理服务器连接外部网络,那么您使用此设置是错误的.但是你配置错了.您不应将项目URL设置为代理服务器.

6)这是另一个深层编码.你不应该使用这样的低级脚本,这将导致你在高级模块中处理的数量问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读