2011-12-22 124 views
6

我试图让django密码重置工作,但重置电子邮件不发送。Django密码重置。不发送邮件

我知道我的电子邮件已正确配置,因为以下工作在shell和我的一个视图中(我正在使用它来获取支持电子邮件给我自己)。

from django.core.mail import send_mail 
send_mail('Subject here', 'Here is the message.', 
      '[email protected]',['[email protected]'], fail_silently=False) 

我可以让我的重置密码查看(密码/ RESET/)后,我给我的电子邮件是正确的重定向我密码/ RESET /做/,但它不发送电子邮件。

这里是我的urls.py

(r'^password/reset/$','django.contrib.auth.views.password_reset'), 
(r'^password/reset/done/$','django.contrib.auth.views.password_reset_done'), 
(r'^password/reset/confirm/$','django.contrib.auth.views.password_reset_confirm'), 
(r'^password/reset/complete/$','django.contrib.auth.views.password_reset_confirm'), 
(r'^password/change/$','django.contrib.auth.views.password_change'), 
(r'^password/change/done/$','django.contrib.auth.views.password_change_done'), 

这里是我的password_reset_form.html

<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="/media/css/style_login.css" /> 
    <title>Información de acceso requerida</title> 
</head> 
<body> 
    <div id="wrapper"> 
     <h1>Recuperar password</h1> 
     <p>Utilice este formulario cuando desee recuperar el password para su usuario.</p> 
     {% if form.errors %} 
     <p>No hay un usuario registrado con ese correo electronico.</p> 
     {% endif %} 
     <form method="post" action="{% url django.contrib.auth.views.password_reset_done %}"> 
      {% csrf_token %} 
      {{ form }} 
      <input class="login" type="submit" value="Recuperar" /> 
     </form> 
    </div> 
</body> 

任何想法?谢谢

+0

请将您的评论转换为以下真实答案。您可以在两天后将其标记为已接受。这将使问题从“未答复的问题”选项卡中消失。 – 2012-01-12 08:57:28

+0

很酷,我是新来的社区,这种提示真的很有用:) – Darkade 2012-01-13 00:09:03

+0

不客气,非常感谢回来帮助我们清理! – 2012-01-13 06:28:43

回答

7

我应该提到我使用hostgator作为我的提供者。所以这是我的settings.py

EMAIL_HOST  = 'my-domain.com' 
EMAIL_HOST_PASSWORD = 'my cpanel password' 
EMAIL_HOST_USER = 'my cpanel user' 
EMAIL_PORT  = 25 
EMAIL_USE_TLS = False 
DEFAULT_FROM_EMAIL = '[email protected]' 
SERVER_EMAIL = '[email protected]' 

上面的设置工作!

+1

我有同样的问题,缺少的值是DEFAULT_FROM_EMAIL。如果没有设置,电子邮件将不会发送。 – Max 2013-04-04 18:31:45

3

在我的情况下,我创建了使用create_user()的用户。我的想法是创建一堆账户,然后告诉人们可以到密码重置表单设置密码。我觉得这很糟糕,如果你需要告诉他们'使用密码'welcome123',然后不要忘记修改你的密码'等等。

我发现,如果我没有通过Password='foo'或另外,如果我通过Password=Nonecreate_user()密码重置是不发送。这是因为Django有时使用空密码来知道它不需要在本地进行身份验证,而是使用LDAP等。

所以,现在我这样做:

User.objects.create_user(
    user_name, 
    email=user_email, 
    password=os.urandom(32), 
) 

而且我可以直接人们使用密码重置功能为他们的新帐户。不过,如果我在create_user中有一个选项来自动发送帐号激活邮件给用户,那么这将是非常棒的!

+0

谢谢,我一直拉我的头发几个小时试图弄清楚。 顺便说一句,有 'password = User.objects.make_random_password()' – 2017-05-26 01:28:01

+0

谢谢! FYI既不os.urandom()或make_random_password()为我工作,我用: from django.contrib.auth.hashers import make_password password = make_password(User.objects.make_random_password()) – python1981 2017-08-11 04:57:15

+0

任何想法或这样做应该停止IMMEDIAGTELY并创建自定义表单以允许用户注册。如果你想做类似管理员批准,电子邮件变更或类似的东西...使用http://django-registration.readthedocs.io/en – 2017-09-15 16:40:00

相关问题