Django无法发送密码重置邮件,已配置URL及邮箱设置求助
解决Django密码重置邮件无法发送的问题
看起来你已经搭好了密码重置的基础路由,但邮件发送失败大概率是邮箱配置不完整或者服务商的限制导致的,我帮你一步步排查:
1. 补全settings.py里的邮箱核心配置
你目前只填了部分邮箱参数,Gmail需要完整的SMTP配置才能正常发信,把settings里的邮箱配置补全:
EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' # Gmail的SMTP服务器地址 EMAIL_PORT = 587 # TLS对应的端口 DEFAULT_FROM_EMAIL = 'my_gmail_email@gmail.com' SERVER_EMAIL = 'my_gmail_email@gmail.com' # 这里要填完整的邮箱地址,别省略 EMAIL_HOST_USER = 'my_gmail_email@gmail.com' EMAIL_HOST_PASSWORD = '你的应用专用密码' # 注意:不是普通的Gmail登录密码,下面会解释
2. 处理Gmail的认证限制
如果你的Gmail账号开启了两步验证,直接用登录密码会触发认证失败,必须创建一个应用专用密码:
- 登录你的Google账号,进入「安全」设置页面
- 找到「应用专用密码」选项(需先开启两步验证才能看到)
- 生成一个专门用于Django的应用密码,将其填入
EMAIL_HOST_PASSWORD字段
如果未开启两步验证,现在Google已经取消了「不太安全的应用访问」选项,这种情况下要么开启两步验证生成应用密码,要么改用其他邮箱服务商(比如Outlook、QQ邮箱)。
3. 先测试基础邮件发送功能
别直接用密码重置视图测试,先通过Django Shell验证邮箱配置是否正常:
python manage.py shell
在Shell中执行以下代码:
from django.core.mail import send_mail send_mail( '测试邮件', '这是一封用于验证配置的测试邮件', 'my_gmail_email@gmail.com', ['你的测试接收邮箱@xxx.com'], fail_silently=False, )
如果执行报错,终端会给出具体错误信息(比如认证失败、连接超时),能快速定位问题;如果发送成功,说明邮箱配置没问题,再去检查密码重置视图的逻辑。
4. 修正路由配置的小细节
你第三个路由用了url()函数,在Django 2.0及以上版本,推荐用re_path()代替url()(两者功能一致,但re_path语义更清晰),不过这不是邮件发送失败的直接原因,只是统一写法的建议:
from django.urls import re_path re_path(r'^reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', password_reset_confirm, name='password_reset_confirm')
5. 查看Django错误日志定位问题
如果上述测试仍失败,查看Django的日志文件(或终端输出),里面会有邮件发送时的详细错误提示:
SMTPAuthenticationError:认证失败,大概率是密码错误或未使用应用专用密码ConnectionRefusedError:无法连接SMTP服务器,检查端口、HOST是否正确,或服务器是否有防火墙限制
按照以上步骤排查,应该能解决邮件发送的问题。
内容的提问来源于stack exchange,提问作者Sergei Petrov
相关产品推荐
相关产品推荐

