【发布时间】:2018-12-29 03:35:02
【问题描述】:
我已经在 Windows R2 2012 上运行 Django 实例一年多了,但遇到了障碍。昨天出事了,不知道怎么回事。尽管在尝试发送电子邮件时,相同的两个错误会在不同的时间不断弹出:
[WinError 10060] 连接尝试失败,因为已连接 当事人在一段时间后没有正确回应,或建立 连接失败,因为连接的主机没有响应
和
socket.gaierror: [Errno 11001] getaddrinfo 失败
用户可以连接到服务器的 IP 地址和 Django 在192.168.1.5:8000 上运行的端口,但他们不能再发送电子邮件了。尽管确实有百分比通过here 的描述,但很少。
我尝试过的事情
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环境变量
就我而言,问题是某些安装在某个时间点已定义 一个 当我没有代理时,我的机器上的环境变量 http_proxy。 删除 http_proxy 环境变量解决了这个问题。
在我的 Django 项目中的 wsgi.y 文件中:
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 的内置电子邮件服务。
【问题讨论】:
-
您是否尝试运行
telnet your_email_hostname_or_ip 25,它将检查端口是否响应。
标签: python django email getaddrinfo