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

Ste*_*hen 5 python email django getaddrinfo

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

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

socket.gaierror:[Errno 11001] getaddrinfo失败

用户可以连接到服务器的IP地址和Django正在运行的端口192.168.1.5:8000,但他们不能再发送电子邮件了.尽管所描述的百分比都经过这里,但很少.

我尝试过的事情

1) 这个解决方案

import socket
socket.getaddrinfo('localhost', 8000)
Run Code Online (Sandbox Code Playgroud)

从我做起python manage.py runserver 192.168.1.5:8000,我添加了IP而没有.

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

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

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

5)编辑http_proxy环境变量

在我的情况下,问题是当我没有代理时,某些安装在我的机器上定义了一个环境变量http_proxy.删除http_proxy环境变量修复了问题.

如此处所述

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

os.environ['http_proxy'] = "http://192.168.1.5:8080"
os.environ['https_proxy'] = "http://192.168.1.5:8080"
Run Code Online (Sandbox Code Playgroud)

6)由于这个答案在这里(可有人请解释我如何做一个Django电子邮件功能),我也试着从溶液包裹它的这种方法在这里

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()
Run Code Online (Sandbox Code Playgroud)

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

scr*_*ter 2

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

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

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

nslookup smptp.mail_host.com
Run Code Online (Sandbox Code Playgroud)

该命令很可能会失败。

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

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

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

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

4)这是另一个证据:)

5)你错了,如果你的网络上有代理服务器来连接外部网络,那么你就使用这个设置。但你配置错了。您不应将项目 url 设置为代理服务器。

6)这是另一个深层编码。您不应该使用如此低级的脚本,这会导致许多问题,这些问题本可以在高级模块中处理。