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

Kiwi TCMS执行sendtestemail报OSError: [Errno 99]无法分配请求地址

错误原因

从调用栈可以定位到,错误触发点是Python的smtplib尝试建立到SMTP服务器的TCP连接阶段,属于系统层面的网络错误,和Kiwi TCMS、Django的代码逻辑无关。Errno 99 Cannot assign requested address的本质是发起socket连接时,要么配置的目标地址不可达导致路由选不到可用的源地址,要么手动绑定了不存在/不可用的本地源IP,导致连接无法建立。

排查解决步骤
  • 核对SMTP配置项
    检查Kiwi的邮件配置(容器内/Kiwi/settings.py、挂载的自定义配置文件、注入的环境变量都要查)里的EMAIL_HOST和EMAIL_PORT:
    • 禁止把SMTP地址填成127.0.0.1/localhost:容器网络是隔离的,容器内的回环地址指向容器本身,不是宿主机。如果SMTP部署在Docker宿主机上,把地址改成Docker网桥的宿主机默认地址172.17.0.1,或者宿主机的内网物理IP即可
    • 确认端口和加密模式匹配:明文SMTP默认25端口、SSL加密SMTP默认465端口、STARTTLS加密SMTP默认587端口,不要错填其他服务的端口
  • 容器内实测网络连通性
    所有连通性测试必须在kiwi_web容器内部执行,宿主机测试通过不代表容器能通:
    # 先进入容器
    docker exec -it kiwi_web bash
    # 把<SMTP地址>、<SMTP端口>替换成你配置里的实际值,测试连通性
    nc -zv <SMTP地址> <SMTP端口>
    
    如果这一步直接报错连接失败,按以下方向排查:
    • 检查SMTP服务的监听配置:如果SMTP服务只绑定了127.0.0.1,需要改成监听0.0.0.0或者对应Docker网桥的IP,否则容器流量无法到达
    • 检查防火墙/安全组规则:确认SMTP服务所在机器的防火墙、云服务商安全组放通了Docker网段的入站访问,对应SMTP端口没有被拦截
    • 如果用的是公网SMTP服务(比如企业邮箱、第三方邮件推送服务),检查容器的出站网络是否正常,确认运营商、网络策略没有封禁25/465/587这类邮件常用端口
  • 检查错误的源地址绑定配置
    如果你在邮件配置里额外加了本地源IP绑定的参数,或者容器配置了出站网络的源IP强制绑定规则,确认绑定的IP是容器网卡实际持有的IP,不要绑定容器不存在的IP段地址,否则会直接触发这个错误。
  • 验证修复结果
    以上排查完成、nc测试连通正常后,重新执行原命令即可发送测试邮件:
    docker exec -it kiwi_web /Kiwi/manage.py sendtestemail user1@example1.tld
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:57:33