使用Python的smtplib发送邮件时出现TimeoutError问题求助
解决SMTP连接超时(WinError 10060)问题
针对你遇到的连接超时错误,以下是几个关键修复方案:
1. 补充SMTP端口参数
Gmail的SMTP服务必须指定端口,默认TLS端口为587,SSL端口为465。你的代码未指定端口,导致连接失败。修改后的代码示例:
import smtplib my_email = "someemail@gmail.com" password = "krwznillogwscftw" # 使用TLS端口587 connection = smtplib.SMTP("smtp.gmail.com", 587) connection.starttls() connection.login(user=my_email, password=password) # 规范邮件格式(必须包含主题等头信息) msg = """Subject: 测试邮件 Hello """ connection.sendmail(from_addr=my_email, to_addrs="anotheremail@gmail.com", msg=msg) connection.close()
如果想用SSL加密连接,可改用SMTP_SSL:
import smtplib from smtplib import SMTP_SSL connection = SMTP_SSL("smtp.gmail.com", 465) # 无需再调用starttls() connection.login(my_email, password) # 发送邮件逻辑同上
2. 排查网络与防火墙限制
- 检查本地防火墙、杀毒软件是否拦截了Python的网络请求,可临时关闭后测试
- 验证网络能否访问Gmail的SMTP服务器,用命令行测试:
若无法连通,可能是运营商屏蔽端口,尝试切换网络(如手机热点)telnet smtp.gmail.com 587
3. 确认Gmail应用密码有效性
你使用的应用密码需满足:
- 账号已开启两步验证
- 应用密码是针对邮件客户端生成的有效密码
- 若未开启两步验证,需开启"低安全性应用访问"(不推荐,优先用应用密码)
4. 规范邮件格式
sendmail的msg参数必须符合邮件标准格式,缺少主题、发件人等头信息可能导致发送失败,务必补充相关内容。
内容的提问来源于stack exchange,提问作者abdo1rahman
相关产品推荐
相关产品推荐

