You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

[Errno 111] Connection refused错误类型及解决,Django send_mail生产环境报错求助

Django send_mail生产环境出现[Errno 111] Connection refused的问题解决

错误类型说明

这是网络连接拒绝错误,核心原因是Django应用尝试连接SMTP邮件服务器时,目标服务器或生产环境的网络策略直接拒绝了连接请求。本地环境能正常运行,说明本地的SMTP配置、网络权限以及邮件服务器的访问规则是兼容的,问题出在生产环境的配置或网络层面。

解决方法

  • 核对生产环境的SMTP配置参数
    打开项目的settings.py,确认以下参数和本地完全一致:

    • EMAIL_HOST:邮件服务器地址(比如smtp.gmail.com)
    • EMAIL_PORT:对应端口(TLS用587,SSL用465,不要混淆)
    • EMAIL_HOST_USER/EMAIL_HOST_PASSWORD:邮件账号和密码(如果是第三方邮箱,确认是否开启了SMTP服务,是否用了应用专用密码)
    • EMAIL_USE_TLS/EMAIL_USE_SSL:加密方式要和端口匹配(比如587对应EMAIL_USE_TLS=True)
  • 检查生产环境的防火墙与安全组规则
    生产服务器的防火墙(比如iptables、ufw)或云服务商的安全组,可能禁止了出站连接邮件服务器的端口(587、465)。需要添加对应端口的出站允许规则,确保服务器能正常访问外部SMTP服务器。

  • 确认邮件服务器的访问限制
    部分免费邮箱服务商(如QQ邮箱、163邮箱)会对非信任IP的连接做拦截,防止垃圾邮件。可以:

    • 联系邮件服务商确认生产服务器IP是否被加入黑名单
    • 改用专业的邮件服务提供商(如SendGrid、Mailgun),这类服务对生产环境的兼容性更好
  • 排查本地邮件服务的依赖(如果用localhost作为邮件服务器)
    若本地环境依赖postfix或sendmail这类本地邮件服务,而生产环境未安装,设置EMAIL_HOST='localhost'就会导致连接失败。此时要么在生产环境安装对应本地邮件服务,要么切换到外部SMTP服务器地址。

  • 测试生产环境到邮件服务器的连通性
    在生产服务器上执行命令测试连接,比如:

    telnet smtp.example.com 587
    

    如果连接失败,说明是网络问题;如果能成功连接,再回头排查Django的配置细节。

内容的提问来源于stack exchange,提问作者Amrit Singtan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:47:21