如何解决Django发送邮件时的TimeoutError超时错误
Django发送邮件超时错误(WinError 10060)排查方案
核心原因
这个错误说明你的Django应用无法成功连接到配置的SMTP邮件服务器,大概率是配置问题或网络限制导致的。
具体排查步骤
核对SMTP基础配置
打开项目settings.py,确认EMAIL_HOST、EMAIL_PORT、EMAIL_USE_TLS/EMAIL_USE_SSL参数和邮箱服务商要求一致:- QQ邮箱:
EMAIL_HOST = 'smtp.qq.com',EMAIL_PORT = 465,EMAIL_USE_SSL = True - 163邮箱:
EMAIL_HOST = 'smtp.163.com',EMAIL_PORT = 465,EMAIL_USE_SSL = True
注意:TLS和SSL不能同时开启,端口要对应(通常587对应TLS,465对应SSL)
- QQ邮箱:
开启邮箱SMTP服务并使用授权码
主流邮箱默认关闭SMTP服务,且不能用登录密码,必须用服务商生成的授权码作为EMAIL_HOST_PASSWORD:- QQ邮箱:在设置→账号中开启POP3/SMTP服务,生成授权码
- Gmail:需开启两步验证,再生成应用专用密码
排查网络限制
- 临时关闭本地防火墙或杀毒软件,用
telnet smtp.qq.com 465测试是否能连接服务器(能连接说明网络无阻塞) - 若使用代理,确认代理允许访问SMTP端口,或暂时关闭代理测试
- 临时关闭本地防火墙或杀毒软件,用
检查发送代码逻辑
确保send_mail参数格式正确,比如收件人是列表格式,示例:from django.core.mail import send_mail send_mail( '测试主题', '邮件内容', '你的发件邮箱@xxx.com', ['收件人邮箱@xxx.com'], fail_silently=False, )
额外测试方案
如果以上步骤无效,先用Python原生smtplib写个简单脚本,排除Django框架问题:
import smtplib from email.mime.text import MIMEText msg = MIMEText('测试内容') msg['Subject'] = '测试邮件' msg['From'] = '你的邮箱@xxx.com' msg['To'] = '收件人邮箱@xxx.com' server = smtplib.SMTP_SSL('smtp.qq.com', 465) server.login('你的邮箱@xxx.com', '授权码') server.send_message(msg) server.quit()
脚本报错则问题在邮箱配置或网络;脚本成功则回到Django配置中排查细节。
内容的提问来源于stack exchange,提问作者jooom
相关产品推荐
相关产品推荐

