Django邮件配置遇ConnectionRefusedError[WinError10061]问题排查求助
ConnectionRefusedError(WinError 10061)成因及排查步骤
错误成因分析
ConnectionRefusedError: [WinError 10061] 本质是本地发起的SMTP连接请求被目标Linode服务器主动拒绝,常见具体原因包括:
- SMTP服务未在587端口监听:即便确认服务运行,可能配置错误导致仅绑定本地127.0.0.1,或未开启587端口监听
- 防火墙规则未生效:Linode云防火墙、服务器本地防火墙(如ufw/iptables)的587端口放行规则存在遗漏,或仅允许特定IP访问
- 域名解析异常:
socket.gaierror: [Errno 11001]说明smtp.domainname.com无法解析到正确IP,导致连接错目标或无法找到主机 - SMTP服务配置限制:邮件服务(如Postfix/Exim)设置了仅允许本地连接、IP白名单限制,或未正确配置TLS导致连接被拒绝
具体排查步骤
1. 验证域名解析正确性
- 执行命令检查解析结果:
确认解析到的IP与Linode服务器公网IP完全一致,若不符需检查DNS的A记录配置,等待DNS TTL生效(通常10分钟到24小时)nslookup smtp.domainname.com # Windows环境可执行 ping smtp.domainname.com - 刷新本地DNS缓存:
# Windows ipconfig /flushdns # Linux systemd-resolve --flush-caches - 用公共DNS测试解析:
nslookup smtp.domainname.com 8.8.8.8
2. 检查Linode服务器上SMTP服务状态与监听端口
- 登录Linode服务器,查看SMTP服务是否正常运行(以Postfix为例):
确保状态为systemctl status postfixactive (running) - 检查服务是否监听587端口:
输出需包含ss -tulpn | grep 5870.0.0.0:587(允许所有IP访问),而非仅127.0.0.1:587
3. 验证服务器防火墙规则
- 检查服务器本地防火墙(以ufw为例):
确认ufw status587/tcp规则为ALLOW Anywhere - 若使用iptables,检查入站规则:
需存在iptables -L -n | grep 587ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:587类似规则 - 再次确认Linode云防火墙的587端口规则,确保未设置IP限制
4. 测试服务器本地连接SMTP端口
- 在Linode服务器上执行本地连接测试:
telnet localhost 587 # 或用nc工具 nc localhost 587- 若连接成功:说明服务本身正常,问题出在外部网络路由或防火墙
- 若连接失败:说明SMTP服务未正确监听587端口,需检查服务配置文件(如Postfix的
main.cf)
5. 检查SMTP服务核心配置
- 以Postfix为例,打开
/etc/postfix/main.cf:- 确认
inet_interfaces = all(允许所有IP访问) - 确认
smtpd_tls_security_level = may或encrypt,匹配Django配置的EMAIL_USE_TLS = True - 检查
smtpd_relay_restrictions规则,未限制外部合法IP连接
- 确认
6. 排查本地网络问题
- 暂时关闭本地防火墙、杀毒软件,重新测试
telnet smtp.domainname.com 587 - 切换网络环境(如手机热点)测试,排除本地运营商对587端口的封锁
- 若有其他可访问的机器,用其测试连接目标端口,确认是否为本地机器问题
内容的提问来源于stack exchange,提问作者A_K
相关产品推荐
相关产品推荐

