Django 1.6:忘记密码不发送电子邮件

时间:2014-07-30 17:08:36

标签: python django email

我正在尝试实现django的内置忘记密码,但我从未收到过该电子邮件。我检查了我的垃圾邮件文件夹但仍然没有。它在键入电子邮件后显示密码重置成功页面,但我从未收到电子邮件。

settings.py

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

DEFAULT_FROM_EMAIL = 'something@gmail.com'
SERVER_EMAIL = 'something@gmail.com'

urls.py

url(r'^forgot-password/$', views.forgot_password, name="forgot-password"),

views.py

def forgot_password(request):
    if request.method == 'POST':
        return password_reset(request, 
            from_email=request.POST.get('email'))
    else:
        return render(request, 'meddy1/forgot_password.html')

我已经尝试通过执行以下操作在python manage.py shell中进行测试

from django.core.mail import EmailMessage
email = EmailMessage('Subject', 'Message', to=['something@gmail.com'])
email.send()

它给出了1的输出,但我仍然没有收到任何电子邮件!!

然后我通过执行以下操作尝试了这个python manage.py shell

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'something@gmail.com',
    ['somethingelse@gmail.com'], fail_silently=False)

它为我提供输出1,我成功接收收件箱中的电子邮件。

我不知道为什么它不通过表单发送电子邮件。

1 个答案:

答案 0 :(得分:1)

我没有收到电子邮件的原因是因为我将用户的电子邮件地址存储为注册用户名。因为我想使用电子邮件地址而不是用户名进行身份验证。因此,每当我在忘记密码页面中输入电子邮件地址时,它都会将我重定向到说明电子邮件已发送的页面。但我永远不会收到任何电子邮件,因为它从未在数据库中找到该电子邮件。理想情况下,它实际上应该引发一个错误,说找不到电子邮件地址。但它并没有!!!

我需要找到一种方法来做到这一点。

所以目前我将用户的电子邮件地址保存为用户名和电子邮件地址。我知道,由于数据冗余,这样做并不是一个好主意。但它有效!