2011-12-22 29 views
6

Estoy intentando restablecer la contraseña de django, pero el correo electrónico de restablecimiento no se envía.restablecimiento de contraseña Django. No envío de correo

Sé que mi correo electrónico está configurado correctamente porque lo siguiente funciona tanto en el shell como en una de mis vistas (lo estoy usando para obtener un correo electrónico de soporte).

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

que puedo llegar a mi resetear la contraseña (password /RESET/) y después le doy mi correo electrónico correctamente me redirige a contraseña/reset/hecho/ pero no envía el correo electrónico.

Aquí es mi 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'), 

Aquí está mi 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> 

¿Alguna idea? Gracias

+0

Por favor, convierta su comentario en una respuesta real a continuación. Puede marcarlo como aceptado después de dos días. Eso hará que la pregunta desaparezca de la pestaña de Preguntas sin respuesta. –

+0

Genial, soy nuevo en la comunidad y ese tipo de consejos son realmente útiles :) – Darkade

+0

De nada, muchas gracias por regresar y ayudarnos a limpiar. –

Respuesta

7

Debería mencionar que estoy usando hostgator como mi proveedor. Así que este es mi 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]' 

¡La configuración anterior funciona!

+1

Tuve el mismo problema, el valor que falta es DEFAULT_FROM_EMAIL. Si eso no está configurado, el correo electrónico no se enviará. – Max

3

En mi caso, creé los usuarios usando create_user(). Mi idea era crear un grupo de cuentas y luego decirle a las personas que podían ir al formulario de restablecimiento de contraseña para establecer su contraseña. Creo que apesta si necesitas decirles 'Usar contraseña' welcome123 'y luego no olvides modificar tu contraseña' o tal.

He encontrado si no pasé Password='foo' o también si pasaba a Password=Nonecreate_user() el restablecimiento de contraseñas se envían no. Esto se debe a que a veces Django usa una contraseña vacía para saber que no necesita autenticarse localmente, sino que usa LDAP o similar.

Así que ahora hago esto:

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

Y puedo dirigir a la gente a utilizar la función de restablecimiento de contraseña para sus nuevas cuentas. Sin embargo, creo que sería increíble si tuviera una opción en create_user para enviar automáticamente correos electrónicos para la activación de la cuenta a los usuarios.

+0

Gracias, he estado tirando de mi cabello durante horas tratando de resolver esto. Por cierto, hay 'password = User.objects.make_random_password()' –

+0

¡Gracias! Para su información ni os.urandom() o make_random_password() trabajaron para mí, he utilizado: de django.contrib.auth.hashers importar make_password password = make_password (User.objects.make_random_password()) – python1981

+0

Cualquiera que esté pensando o haciendo esto debe pare INMEDIATAMENTE y cree formularios personalizados para permitir que los usuarios se registren.si desea hacer cosas como la aprobación del administrador, la varificación del correo electrónico o similares ... use http://django-registration.readthedocs.io/en –

Cuestiones relacionadas