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

如何解决使用smtplib时触发OSError: [Errno 101]网络不可达问题

问题排查与修复方案

确认校园网屏蔽SMTP请求时的修复方案

  • 更换SMTP连接端口:多数邮箱服务商同时支持465端口的SMTPS加密协议,该端口被校园网屏蔽的概率远低于587端口。调整代码逻辑即可:
    将原有代码中的
    mailServer = smtplib.SMTP('smtp.example.com' , 587)
    mailServer.starttls()
    
    替换为
    mailServer = smtplib.SMTP_SSL('smtp.example.com' , 465)
    
    无需额外修改其他逻辑即可测试连通性。
  • 配置代理转发请求:如果校园网要求必须走代理访问公网,可以安装PySocks库为SMTP请求配置合法的HTTP/SOCKS代理,绕开端口屏蔽。
  • 改用邮箱HTTP API发信:主流邮箱服务商均提供基于80/443端口的HTTP发信接口,这两个端口几乎不会被校园网屏蔽,直接调用API发信的兼容性远高于原生SMTP协议。

非校园网屏蔽的其他触发因素

  • 树莓派网络配置异常:先在树莓派终端执行ping smtp.example.com确认域名可以正常解析,再执行telnet smtp.example.com 587测试端口连通性。如果不通先排查树莓派的DNS设置、网关配置,以及是否开启了本地防火墙拦截出站请求。
  • 邮箱服务端访问限制:部分邮箱会拦截非常用IP段的客户端登录请求,比如Gmail默认关闭低安全性应用访问权限,需要在邮箱后台开启对应权限,或者生成专用的应用密码用于客户端登录。同时要确认你填写的SMTP服务器地址、端口完全符合邮箱服务商的官方要求。
  • Python版本兼容性问题:你使用的Python3.4版本已经停止维护多年,旧版本smtplib存在TLS握手兼容缺陷,可以升级Python到3.7以上版本后重试。
  • 本地防火墙拦截:检查树莓派是否配置了ufw、iptables等防火墙规则,拦截了587端口的出站请求,可临时关闭防火墙后复测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:57:03