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

为何Python的smtplib在VSCode等编辑器超时,Replit却运行正常?

解决本地Python smtplib连接Gmail超时问题

你遇到的情况是本地运行代码触发TimeoutError,但Replit上正常,核心原因是本地网络环境或Gmail安全配置限制了连接,以下是具体解决步骤:

1. 排查本地防火墙/杀毒软件拦截

  • 临时关闭Windows防火墙(或其他第三方防火墙),再运行代码测试,确认是否是防火墙阻断了Python的网络请求。如果没问题,把Python程序加入防火墙白名单。
  • 部分杀毒软件的网络监控功能也会拦截SMTP连接,暂时禁用相关模块后重试。

2. 更换网络环境测试

  • 切换到手机热点网络,排除公司/学校局域网屏蔽SMTP端口(587/465)的可能。很多内网会限制这类邮件服务端口。

3. 检查Gmail安全配置

  • 如果你的Gmail账号开启了两步验证,绝对不能用原密码登录,必须生成「App密码」:
    1. 登录Google账号后台,进入「安全」页面
    2. 确保「两步验证」已开启,然后找到「App密码」选项
    3. 生成一个用于邮件客户端的App密码,替换代码里的password字段
  • 如果没开两步验证,现在Gmail默认禁用了“不安全应用访问”,还是建议开启两步验证后用App密码,这是当前唯一合法的非OAuth登录方式。

4. 调整代码的SMTP连接方式

  • 尝试改用SSL直接连接(端口465),替代原来的STARTTLS(端口587),代码修改如下:
import smtplib
my_email = "<email>@gmail.com"
password = "你的App密码"

# 改用SMTP_SSL直接连接465端口
connection = smtplib.SMTP_SSL("smtp.gmail.com", 465)
connection.login(user=my_email, password=password)
# 注意邮件格式必须包含Subject头,否则可能被判定为垃圾邮件
connection.sendmail(
    from_addr=my_email,
    to_addrs="receive@gmail.com",
    msg="Subject: 测试邮件\n\n这是测试内容"
)
connection.close()
print("done")
  • 另外,原代码的msg缺少Subject头,即使发送成功也可能被收件方放到垃圾邮件里,建议按上面的格式补充。

5. 检查本地DNS解析

  • 若以上方法都无效,可能是本地DNS解析smtp.gmail.com失败,尝试修改本地DNS服务器为8.8.8.8(Google公共DNS)后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:05:05