我在Windows R2 2012上运行Django实例已有一年多了,我遇到了一个障碍。昨天发生了什么事,我不知道会是什么。尝试发送电子邮件时,相同的两个错误会在不同时间弹出:
[WinError 10060]连接尝试失败,因为已连接 一段时间后未正确响应,或已建立 连接失败,因为连接的主机无法响应
和
socket.gaierror:[Errno 11001] getaddrinfo失败
用户可以连接到服务器的IP地址,并且端口Django在anchor
上运行,但是他们不再能够发送电子邮件。尽管确实按照here的说明进行了处理,但很少。
我尝试过的事情
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环境变量可解决此问题。
,并在我的Django项目的setting.py
文件中:
http_proxy
6)给出了这个答案here(有人可以解释一下我如何对django电子邮件功能进行处理),我还尝试了这种从解决方案中包装它的方法{ {3}}
wsgi.y
尽管我不想使用这样的方法,但是我更喜欢使用Django的内置电子邮件服务。
答案 0 :(得分:2)
由于您尚未更改代码,因此共享的错误表明这是与网络相关的问题。
最有可能是DNS问题。在您的settings.py
中,您指定了EMAIL_HOST
,我相信这是一个主机名。您需要检查服务器的DNS服务器。
您提到的是有关检查防火墙设置的信息,但您做错的是没有检查实际连接。
要解决该问题,您可以使用几个命令行实用程序,例如telnet
或nslookup
。您可以检查是否可以解析主机名:
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代理”。