smtplib发送邮件超时错误求助:已排查配置仍无法成功发送
解决Gmail SMTP连接超时问题
问题重现
运行以下代码时出现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:
import smtplib myemail = "sender@gmail.com" password_code = "ieruweioruiweoru" with smtplib.SMTP("smtp.gmail.com") as connection: connection.starttls() connection.login(user=myemail, password=password_code) connection.sendmail(from_addr=myemail, to_addrs="reciever@gmail.com", msg="this is body")
解决方案
指定正确的SMTP端口:Gmail SMTP默认端口为587,未显式指定端口是常见的连接失败原因,同时
sendmail的msg参数需符合邮件格式规范(包含必要头信息),修改代码如下:import smtplib myemail = "sender@gmail.com" password_code = "ieruweioruiweoru" # 显式指定587端口 with smtplib.SMTP("smtp.gmail.com", 587) as connection: connection.starttls() connection.login(user=myemail, password=password_code) # 补充邮件头,避免被识别为垃圾邮件 msg = f"From: {myemail}\nTo: reciever@gmail.com\nSubject: Test Email\n\nthis is body" connection.sendmail(from_addr=myemail, to_addrs="reciever@gmail.com", msg=msg)检查网络与防火墙拦截:
- 临时关闭本地防火墙、杀毒软件,测试是否能正常连接;
- 用命令行验证端口连通性:执行
telnet smtp.gmail.com 587,若返回220 smtp.gmail.com ESMTP则端口正常,否则说明端口被拦截。
确认Gmail认证权限:
- 若账号开启了两步验证,必须使用谷歌账号「安全」设置中生成的应用密码(App Password)代替原密码;
- 未开启两步验证的账号,需确保谷歌账号允许“不太安全的应用访问”(注:谷歌已逐步移除该选项,优先推荐使用应用密码)。
改用SMTP_SSL连接:若starttls方式仍有问题,尝试直接使用SSL加密连接465端口:
import smtplib myemail = "sender@gmail.com" password_code = "ieruweioruiweoru" with smtplib.SMTP_SSL("smtp.gmail.com", 465) as connection: connection.login(user=myemail, password=password_code) msg = f"From: {myemail}\nTo: reciever@gmail.com\nSubject: Test Email\n\nthis is body" connection.sendmail(from_addr=myemail, to_addrs="reciever@gmail.com", msg=msg)排查DNS解析问题:若本地无法解析
smtp.gmail.com,可切换DNS服务器为谷歌公共DNS(8.8.8.8)后重试。
内容的提问来源于stack exchange,提问作者techno adnan
相关产品推荐
相关产品推荐

