使用Python的SMTPLIB时出现Timeout Error,求原因及解决办法
Gmail SMTP Timeout Error 排查与解决(已启用2FA+应用专用密码仍报错)
可能的原因及对应解决方法
1. 网络环境被限制
公司、学校内网或公共WiFi常屏蔽SMTP常用端口(Gmail的587、465端口),或是网络延迟过高导致连接超时。
- 解决:
- 切换手机热点测试,先排除网络拦截问题。
- 确保代码端口与加密方式匹配:Gmail优先用587端口+TLS加密,或465端口+SSL加密,不要混淆。
- 正确代码示例:
import smtplib from email.mime.text import MIMEText # 构造邮件内容 msg = MIMEText('这是测试邮件') msg['Subject'] = 'SMTP测试' msg['From'] = 'your-account@gmail.com' msg['To'] = 'recipient@example.com' try: # 587端口+TLS加密的标准写法 with smtplib.SMTP('smtp.gmail.com', 587) as server: server.starttls() # 必须先启动TLS加密 server.login('your-account@gmail.com', '你的16位应用专用密码') server.send_message(msg) print('邮件发送成功') except smtplib.SMTPTimeoutError: print('连接超时,请检查网络或端口设置')
2. 本地防火墙/杀毒软件拦截
电脑防火墙、杀毒软件可能阻止Python程序发起SMTP连接,直接引发超时。
- 解决:
- 临时关闭防火墙或杀毒软件,测试能否发送成功。若有效,给Python解释器或你的脚本添加防火墙允许规则。
3. SMTP配置出错
不少人会写错服务器地址(比如把smtp.gmail.com写成smtp.google.com)、漏加加密步骤,或是复制应用密码时带了多余空格。
- 解决:
- 核对服务器地址为
smtp.gmail.com,应用密码是16位无空格的字符串。 - 若用465端口,需改用
SMTP_SSL方式:with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server: server.login('your-account@gmail.com', '应用专用密码') server.send_message(msg)
- 核对服务器地址为
4. Gmail账户安全拦截
即便有应用密码,Gmail检测到陌生设备/位置的登录时,可能悄悄拦截连接,表现为超时。
- 解决:
- 登录Gmail账户,进入「安全」页面查看「最近的安全活动」,若有可疑登录尝试,手动允许该设备/位置。
- 确认生成应用密码时,选择的是「邮件」应用类型,不要选错其他类型。
内容的提问来源于stack exchange,提问作者A.R.Z the gamers
相关产品推荐
相关产品推荐

