更换IP后Python发送Gmail报[WinError 10060]错误求助
解决Gmail SMTP连接超时(WinError 10060)问题
针对你换IP后无法连接Gmail SMTP服务器的问题,从网络、代码、账号三个维度给出排查和解决方法:
一、先排查网络连通性
WinError 10060是TCP连接超时,说明新IP环境下根本连不上smtp.gmail.com的465端口,优先确认网络通路:
- 手动测试:打开命令提示符,执行
telnet smtp.gmail.com 465(若没有telnet,先在Windows功能里启用)。如果提示“无法打开连接”,原因可能是:- 你的新IP被Gmail反垃圾系统拉黑(常见于动态IP、共享IP)
- 所在网络的运营商/防火墙拦截了465端口(比如公司内网、校园网)
- 换端口尝试:改用Gmail推荐的587端口+STARTTLS协议,很多网络环境下587不会被拦截。
二、代码调整与优化
1. 切换到587端口(优先尝试)
恢复你代码中注释掉的587端口逻辑,替换当前的SMTP_SSL代码:
# 替换原SMTP_SSL相关代码 mailServer = smtplib.SMTP("smtp.gmail.com", 587) mailServer.ehlo() mailServer.starttls() # 必须开启TLS加密 mailServer.login(gmail_user, gmail_pwd)
2. 增加超时参数
给SMTP连接加上超时限制,避免无限等待:
# 针对465端口的情况 mailServer = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=30) # 针对587端口的情况 mailServer = smtplib.SMTP("smtp.gmail.com", 587, timeout=30)
3. 完善错误捕获与规范代码
添加异常捕获明确错误类型,同时优化类型判断逻辑:
@retry(stop_max_delay=60000) def mail(gmail_user, gmail_pwd, to, subject, text, attach=None): to = to if isinstance(to, list) else [to] # 替换原type判断,更规范 msg = MIMEMultipart() msg['From'] = gmail_user msg['To'] = to[0] msg['Cc'] = ','.join(to[1:]) msg['Subject'] = subject msg.attach(MIMEText(text)) if attach: part = MIMEBase('application', 'octet-stream') part.set_payload(open(attach, 'rb').read()) encode_base64(part) part.add_header('Content-Disposition', 'attachment', filename=('utf-8', 'he', os.path.basename(attach))) msg.attach(part) try: mailServer = smtplib.SMTP("smtp.gmail.com", 587, timeout=30) mailServer.ehlo() mailServer.starttls() mailServer.login(gmail_user, gmail_pwd) # sendmail需包含所有收件人(To+Cc),这里to列表已包含全部 mailServer.sendmail(gmail_user, to, msg.as_string()) mailServer.quit() except smtplib.SMTPConnectError as e: print(f"连接SMTP服务器失败: {e}") raise except smtplib.SMTPAuthenticationError as e: print(f"认证失败: {e}") raise except Exception as e: print(f"发送邮件出错: {e}") raise
三、账号安全设置排查
- 确认应用专用密码有效性:
- 登录Google账号安全中心,检查两步验证是否正常开启
- 重新生成应用专用密码时,选择“邮件”作为应用类型,复制时不要带空格或多余字符
- 检查账号状态:查看Gmail收件箱是否有“异常登录提醒”或“账号锁定”通知,若有按提示解锁
四、其他排查点
- 本地防火墙/杀毒软件:确认Python程序被允许访问网络,没有被拦截出站连接
- IP更换频率:如果是频繁更换动态IP,Gmail可能触发临时限制,建议使用静态IP或等待24小时后重试
内容的提问来源于stack exchange,提问作者davidbrown
相关产品推荐
相关产品推荐

