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
相关产品推荐
相关产品推荐

