通过Django发送电子邮件-WinError 10060连接尝试失败,并且GetAddrInfo错误

时间:2018-07-20 19:15:37

标签: python django email getaddrinfo

我在Windows R2 2012上运行Django实例已有一年多了,我遇到了一个障碍。昨天发生了什么事,我不知道会是什么。尝试发送电子邮件时,相同的两个错误会在不同时间弹出:

  

[WinError 10060]连接尝试失败,因为已连接   一段时间后未正确响应,或已建立   连接失败,因为连接的主机无法响应

  

socket.gaierror:[Errno 11001] getaddrinfo失败

用户可以连接到服务器的IP地址,并且端口Django在anchor上运行,但是他们不再能够发送电子邮件。尽管确实按照here的说明进行了处理,但很少。

我尝试过的事情

1) This solution

presentationStyle

自从我做192.168.1.5:8000以来,我没有添加任何IP。

2),我进入了防火墙设置,并确保端口都正常。在我的Django项目的import socket socket.getaddrinfo('localhost', 8000) 文件和25中声明的SMTP。所有这些,入站和出站。

3)我尝试在本地计算机上发送邮件,并且可以正常工作。我使用了其他不使用Django来发送电子邮件的程序,它们在除Server之外的所有其他计算机上进行处理。所以我知道这不是我的电子邮件服务器。

4)我将电子邮件配置更改为使用我的Gmail帐户,并且该服务器在除服务器之外的所有其他计算机上都可以处理。因此必须是环境。

5)编辑python manage.py runserver 192.168.1.5:8000环境变量

  

在我的情况下,问题是在某些时候定义了一些安装   一个        当我没有代理时,我的机器上的环境变量http_proxy。        删除http_proxy环境变量可解决此问题。

As described here

,并在我的Django项目的setting.py文件中:

http_proxy

6)给出了这个答案here(有人可以解释一下我如何对django电子邮件功能进行处理),我还尝试了这种从解决方案中包装它的方法{ {3}}

wsgi.y

尽管我不想使用这样的方法,但是我更喜欢使用Django的内置电子邮件服务。

2 个答案:

答案 0 :(得分:2)

由于您尚未更改代码,因此共享的错误表明这是与网络相关的问题。

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

您提到的是有关检查防火墙设置的信息,但您做错的是没有检查实际连接。 要解决该问题,您可以使用几个命令行实用程序,例如telnetnslookup。您可以检查是否可以解析主机名:

nslookup smptp.mail_host.com

此命令很可能会失败。

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

1)您试图获取服务getaddrinfo,在其中需要输入smtp服务器的主机名,这将导致相同的错误。套接字是应用程序层连接中非常原始的部分,您确实不需要深入探讨。

2)检查防火墙设置是可以的。

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

4)这是另一种证据:)

5),如果您的网络上有代理服务器连接外部网络,则您会出错,然后使用此设置。但是您配置错误。您不应将项目网址设置为代理服务器。

6)这是另一种深层编码。您不应该使用这样的低级脚本,否则将导致许多问题,而这些问题本来可以在高级模块中处理的。

答案 1 :(得分:1)

我的回答集中在一个奇怪的事实上,即您可以使用SOCKS5代理解决该问题。 (我相信您。没有时间向您询问详细信息。)您已验证example solution by SOCKS5对您有用。 Django使用相同的<?php $data_string = json_encode(["userVO" => ['userId' => 899, 'lstAuthToken' => 'token']]); $ch = curl_init('http://54.84.41.76/wkconnects/rest/manageLST/generateLSTAuthToken'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Content-Length: ' . strlen($data_string)]); $result = json_decode(curl_exec($ch)); if($result->status == "true"){ $lstAuthToken = $result->lstAuthToken; $sessionAuthenticationToken = $result->sessionAuthenticationToken; } else{ echo "something went wrong"; } ?> ,您可以通过添加到smtplib的代码轻松地以相同的方式包装它。

wsgi.py

Http代理(第 5段)不相关,因为它不影响SMTP和除http之外的其他协议,因为“ SOCKS的运行级别比HTTP代理”。