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

SMTP在Linux正常运行但Mac异常:Python代码执行报错咨询

解决Mac下Python SMTP连接Gmail失败的问题

看起来你碰到了跨平台的SMTP连接坑——Linux上跑的好好的邮件代码,到Mac上卡在server = smtplib.SMTP("smtp.gmail.com", "587")这一步动不了。我之前也遇到过类似的情况,大概率是Mac的网络限制或者Gmail的安全策略导致的,给你几个排查方向:

1. 先检查Mac的网络拦截

Mac自带的防火墙或者第三方安全软件很容易拦截出站的587端口连接:

  • 打开「系统设置」→「网络」→「高级」→「代理」,看看有没有莫名其妙开着的HTTP/HTTPS代理,临时关掉试试;
  • 去「系统设置」→「隐私与安全性」→「防火墙」,确认防火墙没有阻止Python进程联网。可以临时关闭防火墙测试,如果能通了,记得给Python加个允许规则。

2. 核对Gmail的安全配置

虽然Linux能用,但Mac环境可能被Gmail判定为「陌生设备」:

  • 登录你的Gmail账号,去「账户」→「安全」里,开启两步验证后创建应用专用密码,替换代码里的普通密码(现在Gmail已经不推荐直接开「不太安全的应用访问」了,应用专用密码是合规的方式);
  • 看看「最近的安全活动」里有没有Mac的登录被拦截的记录,手动允许该设备的访问权限。

3. 调整SMTP连接的代码细节

Mac的Python环境在SSL处理上和Linux可能有差异,试试这些修改:

  • 给SMTP初始化加个超时参数,避免无限等待:
    server = smtplib.SMTP("smtp.gmail.com", 587, timeout=30)
    
  • 必须显式调用starttls()启用加密,Gmail强制要求这一步,有些Linux环境可能隐式处理了,但Mac不行:
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.starttls()  # 这行一定要加在login之前
    server.login(fromaddr, "你的应用专用密码")
    
  • 检查Mac上的Python版本,建议用3.8以上的版本,旧版本的smtplib可能有SSL兼容性bug。

4. 排查DNS解析问题

如果上面都不行,可能是Mac的DNS解析不了smtp.gmail.com:

  • 打开终端执行nslookup smtp.gmail.com,看看能不能返回正常的IP地址;
  • 如果解析失败,切换DNS服务器到8.8.8.8(谷歌DNS)或者1.1.1.1(Cloudflare DNS):「系统设置」→「网络」→「高级」→「DNS」,添加新的服务器地址。

按这个顺序排查,应该能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:55:21