使用Python smtplib库发送Gmail邮件出现WinError10060超时错误求助
smtplib连接Gmail触发WinError 10060超时的解决方案
原始问题代码
import smtplib connection = smtplib.SMTP("smtp.gmail.com") connection.starttls() connection.login(user="mymail@gmail.com", password="mypassowrd") connection.sendmail(from_addr="mymail@gmail.com", to_addrs="recievermail@gmail.com", msg="Hello") connection.close()
运行抛出的错误栈
Traceback (most recent call last): File "E:\100Days-Python_programs\Day32\Birthday Wisher (Day 32) start\main.py", line 3, in <module> connection = smtplib.SMTP("smtp.gmail.com") File "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 253, in __init__ (code, msg) = self.connect(host, port) File "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 339, in connect self.sock = self._get_socket(host, port, self.timeout) File "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\smtplib.py", line 310, in _get_socket return socket.create_connection((host, port), timeout, File "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\socket.py", line 843, in create_connection raise err File "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\socket.py", line 831, in create_connection sock.connect(sa) TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond Process finished with exit code 1
已完成的排查操作
- 开启Google账号的低安全性应用访问权限
- 关闭Google账号的所有附加安全验证步骤
- 关闭本地系统防火墙防护
以上操作均未解决连接超时问题。
可落地的解决步骤
- 修正端口参数配置
smtplib初始化SMTP连接时不指定端口的话,默认使用25端口。该端口在绝大多数家庭、办公网络环境下会被运营商或网关拦截,根本无法连通Gmail服务器。Gmail的TLS加密连接必须显式指定587端口,SSL直连必须指定465端口,不能依赖默认端口参数。 - 调整代码连接逻辑
修正后的可参考代码:import smtplib # 显式指定587端口,延长超时阈值避免快速触发超时 connection = smtplib.SMTP("smtp.gmail.com", port=587, timeout=30) connection.starttls() connection.login(user="mymail@gmail.com", password="你的专属应用授权密码") connection.sendmail(from_addr="mymail@gmail.com", to_addrs="recievermail@gmail.com", msg="Hello") connection.close() - 匹配账号认证规则
Google从2022年起已彻底关闭“低安全性应用访问”通道,不再支持使用账号本身的登录密码直接做SMTP认证。无论是否关闭账号附加安全验证,都需要在Google账号后台生成16位的专属应用授权密码,替换代码中的普通登录密码,才能通过认证环节。 - 校验网络连通性
如果本地网络无法直连Gmail的境外SMTP服务,哪怕端口和配置全部正确也会触发10060超时。可在系统命令行执行telnet smtp.gmail.com 587校验连通性,如果返回连接失败,说明当前网络出口无法直达目标服务,需要为Python进程配置可用的网络代理后再做调试。
内容的提问来源于stack exchange,提问作者Deep Shah
相关产品推荐
相关产品推荐

