You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:29:10