python - django 1.7.8 不发送带有密码重置的电子邮件

标签 python django email

项目的 urls.py 的相关部分:

from django.conf.urls import include, url, patterns
urlpatterns = patterns('',

  # other ones ...

  url(r'^accounts/password/reset/$', 
  'django.contrib.auth.views.password_reset',
 {'post_reset_redirect' : '/accounts/password/reset/done/'}),

  url(r'^accounts/password/reset/done/$', 
  'django.contrib.auth.views.password_reset_done'),

  url(r'^accounts/password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', 
  'django.contrib.auth.views.password_reset_confirm',
 {'post_reset_redirect' : '/accounts/password/done/'}),

  url(r'^accounts/password/done/$', 
  'django.contrib.auth.views.password_reset_complete'),

)

根据要求,这里是密码重置表格:

{% extends "site_base.html" %}

{% block title %}Reset Password{% endblock %}

{% block content %}
<p>Please specify your email address to receive instructions for resetting it.</p>

<form action="" method="post">
    <div style="display:none">
        <input type="hidden" value="{{ csrf_token }}" name="csrfmiddlewaretoken">
    </div>
     {{ form.email.errors }}
    <p><label for="id_email">E-mail address:</label> {{ form.email }} <input type="submit" value="Reset password" /></p>
</form>
{% endblock %}

但是每当我导航到 /accounts/password/reset/ 页面并填写电子邮件并单击进入页面时,该页面立即重定向到 /accounts/password/reset/done/ 并且没有发送电子邮件。

我的相关settings.py变量:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'XXX@gmail.com'
EMAIL_HOST_PASSWORD = 'XXXXXX' 
EMAIL_PORT = 587

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

我知道电子邮件可以正常工作,因为我使用 django-registration-redux 的注册流程完美无缺。

有什么想法吗?

最佳答案

我试图重现您的情况,但遇到了以下情况:

  1. 邮件仅发送给活跃用户。与没有用户关联的电子邮件将不会收到任何电子邮件(显然)。
  2. 我在第 270 行为 email = loader.render_to_string(email_template_name, c) 得到了一个错误表单的保存方法:

NoReverseMatch at /accounts/password/reset/ Reverse for 'password_reset_confirm' with arguments '()' and keyword arguments '{'token': '42h-4e68c02f920d69a82fbf', 'uidb64': b'Mg'}' not found. 0 pattern(s) tried: []

您的 urls.py 似乎不包含任何名为“password_reset_confirm”的 url。所以你应该改变你的网址:

url(r'^accounts/password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
  'django.contrib.auth.views.password_reset_confirm',
 {'post_reset_redirect': '/accounts/password/done/'},),

收件人:

url(r'^accounts/password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
  'django.contrib.auth.views.password_reset_confirm',
 {'post_reset_redirect': '/accounts/password/done/'}, name='password_reset_confirm'),

如果您已经完美地设置了您的电子邮件配置,那么您应该可以毫无问题地收到电子邮件。如果您仍然遇到此问题,请使用调试器检查异常发生的位置。

PS:我已经使用 django 1.7.8 进行了测试,模板位于:Python34\Lib\site-packages\django\contrib\admin\templates\registration。使用您在问题中所写的网址和 View 。

关于python - django 1.7.8 不发送带有密码重置的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336617/

相关文章:

python - Django 模型字段如何与多个模型相关?

python - 如何在 pygame 中显示平滑的加载栏?

Django 测试 : increase testsRun counter

HTML 电子邮件模板可点击区域

email - PHPMailer AltBody 不工作

python - 使用 Python 列表理解从嵌套元组字典结构中检索数据

python - 如何在 immut 中使用相同的键获取所有值。听写?

django - 将迁移更改写入 django 简单历史记录

python - Django Admin-父 ModelChoiceField 上的动态子 ModelChoiceField 查询集

Django cookies 在电子邮件地址周围放置双引号