Django密码重置遇SMTPServerDisconnected错误,求排查解决方法
解决Django密码重置邮件问题的步骤
一、先搞定SMTPServerDisconnected错误
这个错误本质是Django连不上邮件服务商的SMTP服务器,按以下步骤排查:
1. 确保settings.py里的邮件配置完全正确
不同邮箱的配置规则不一样,下面是常用邮箱的正确配置模板,直接替换成你的信息:
Gmail配置(需开启两步验证+生成App Password)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = '你的gmail邮箱地址' # 这里填Gmail应用专用密码,不是登录密码! EMAIL_HOST_PASSWORD = '你的Gmail应用专用密码' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
Yahoo邮箱配置(需生成应用专用密码)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.mail.yahoo.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = '你的yahoo邮箱地址' # 填Yahoo的应用专用密码 EMAIL_HOST_PASSWORD = '你的Yahoo应用专用密码' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
私人域名邮箱配置(以阿里云企业邮箱为例)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.你的域名.com' # 比如smtp.xxx.com EMAIL_PORT = 465 # 阿里云用465 SSL,具体看服务商文档 EMAIL_USE_SSL = True EMAIL_HOST_USER = '你的私人域名邮箱地址' # 填服务商给的授权码,不是登录密码 EMAIL_HOST_PASSWORD = '你的私人邮箱授权码' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
关键注意点:
- 所有邮箱都不要用登录密码,必须用应用专用授权码,这是新手最容易踩的坑!
EMAIL_USE_TLS和EMAIL_USE_SSL不要同时开启,选一个对应端口的配置即可(比如587对应TLS,465对应SSL)。
2. 检查网络和防火墙
- 切换到手机热点测试,排除公司/家庭网络屏蔽SMTP端口的问题。
- 本地开发时暂时关闭防火墙,确认是否是防火墙挡住了连接。
3. 用Django Shell测试连接
打开终端进入项目目录,执行:
python manage.py shell
然后输入测试代码:
from django.core.mail import send_mail send_mail( '测试邮件', '这是测试内容', '你的发件邮箱', ['你的收件邮箱'], fail_silently=False, )
如果连接失败,会直接显示具体错误信息,比密码重置页面的提示更详细,方便精准排查。
二、解决流程正常但收不到邮件的问题
如果执行密码重置时没报错,但收件箱看不到邮件:
- 先去垃圾邮件/广告邮件文件夹查找,大部分情况是被邮件服务商判定为垃圾邮件。
- 确保
DEFAULT_FROM_EMAIL和EMAIL_HOST_USER完全一致,比如发件邮箱是abc@gmail.com,DEFAULT_FROM_EMAIL也要设成abc@gmail.com,避免被判定为伪造发件人。 - 检查邮件内容是否有敏感词,比如“重置密码”“链接”,可以先发送纯文本测试邮件验证。
三、其他无用操作提醒
不要随便删除重建迁移文件,密码重置功能和迁移文件无关,纯纯白忙活。如果是私人域名邮箱,可联系域名服务商确认域名DNS的MX记录配置是否正确。
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

