Django注册邮件无法发送

6

我一直在尝试让django-registration-redux账户激活邮件发送给新注册的用户。

我已经让所有与邮件无关的部分正常工作,比如登录/注销和实际注册用户!当我注册时,它会自动将我登录为该用户。但我从未收到激活邮件。

我尝试了各种不同的方法来尝试让它工作,我遵循了一些设置整个过程的教程,但邮件仍然无法工作。

这是一些代码设置,我正在使用我在线下载的注册模板。

settings.py

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'registration',
    'synths',
)


# user reg settings
REGISTRATION_OPEN = True
ACCOUNT_ACTIVATION_DAYS = 7
REGISTRATION_AUTO_LOGIN = True

LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/login/'

# i tried including this line but still nothing
# EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

# email
# first i tried setting up the debbuging server with this CMD line
# python -m smtpd -n -c DebuggingServer localhost:1025
# i dont know if it worked!, i got no errors but the cursor just
# sat there blinking at me! i was expecting some output to tell me
# the server had started
# these were the settings i used for that

EMAIL_HOST = '127.0.0.1'
EMAIL_PORT = 1025
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''

# then i tried using my own address and smtp.live.com

EMAIL_HOST = 'smtp.live.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'myemailaddress@hotmail.com'
EMAIL_HOST_PASSWORD = '123123abcabc'

# still nothing

我需要确认一下,这里是否缺少重要的设置?

urls.py文件

# included amongst my other urls
(r'^accounts/', include('registration.backends.simple.urls')),

看起来教程和文档都很完整。像我说的,注册功能除了邮件之外都完美运行。

我注意到的一件事是,如果您希望用户激活他们的账户,那么您可能不应该将自动登录设置为True,但是注释掉那一行并没有改变任何内容,我仍然在注册后自动登录。这似乎是一个小问题,但也许与邮件无法正常工作有关?

我不知道,我对此感到困惑。要么我漏了一些设置,要么代码不起作用,要么Python smtpd不起作用,要么我的smtp.live.com设置有误!

非常感谢任何见解!

编辑:尝试“重置密码”电子邮件功能时,我收到了以下错误信息

SMTPException at /accounts/password/reset/

SMTP AUTH extension not supported by server.

Request Method:     POST
Request URL:        http://localhost:8000/accounts/password/reset/
Django Version:     1.7.6
Exception Type:     SMTPException
Exception Value:    SMTP AUTH extension not supported by server.

Exception Location: C:\Python34\lib\smtplib.py in login, line 613
Python Executable:  C:\Python34\python.exe
Python Version:     3.4.3

编辑2:使用这些设置,我能够获得密码/重置/完成页面,但是没有收到实际的电子邮件。
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

EMAIL_HOST = '127.0.0.1'
EMAIL_PORT = 1025

使用您第二次编辑中的设置,您不应该收到实际的电子邮件... 电子邮件应该出现在您的控制台中。 - rnevius
mevius是正确的。如果您想要收到实际的电子邮件,您需要将SMTP设置为EMAIL_HOST。另外,如果您在新用户注册时使用相同的SMTP和地址,可能不会显示在收件箱中,但会出现在已发送邮件中。 - jcs
很奇怪,我已经尝试使用控制台后端、SMTP后端和Debuggserver,但都没有成功。设置是正确的。然后我尝试了Gmail和Live SMTP服务器,设置也是正确的,TLS=true,而且端口号设置正确。但仍然没有成功。我正在使用django-registration-redux,它适用于Python 3和Django 1.7,这就让我感到困惑了! - ThriceGood
我有相同的问题。密码重置对我有效 - 我在控制台中看到邮件。我正在使用django 1.8,注册redux 1.2和python 3.4。我认为问题出在更新到1.2的redux上,但不确定。可能有人忘记在用户注册时发送邮件了。在我的情况下,在注册完成后,用户也始终自动登录。 - maddob
4个回答

3
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

仅在控制台上显示电子邮件。

相反,您应该使用

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

此外,使用现有的SMTP服务器(如Gmail)更加方便。
为此,您需要将以下内容添加到Django设置文件中。
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'                                                                             
EMAIL_HOST ='smtp.gmail.com'                                   
EMAIL_PORT = 587                                                             
EMAIL_HOST_USER = 'youruser@gmail.com'                              
EMAIL_HOST_PASSWORD = 'gmail app password' #This is not your gmail password.
EMAIL_USE_TLS = True

更多有关密码的帮助,请点击这里


你好,你提供的参考资料似乎很有帮助。但是在添加密码重置功能后,出现了异常类型:SMTPServerDisconnected,异常值为“连接意外关闭”的错误。但是当我将端口改为465时,密码重置功能可以正常工作,但注册功能无法正常工作。这两个功能之间是否存在相关性? - Suman Astani

2
您可以尝试添加一个DEFAULT_FROM_EMAIL设置,并设置以下设置:
EMAIL_USE_TLS = True
EMAIL_USE_SSL = True

这将允许Django使用安全的电子邮件发送。

1
检查您的urls.py文件,并确保使用hmac而不是simple。
urlpatterns = [
    #...    
    url(r'^accounts/', include('registration.backends.hmac.urls')),
]

此外,在您的setting.py文件中,INSTALLED_APPS部分,请确保'registration'在django.contrib.auth之前。
INSTALLED_APPS = [
    #.....
    'registration',
    'django.contrib.auth',
    #...
]

0

我知道这是一个老问题,但我认为它会帮助任何寻找答案的人。 您已经设置了您的urlconf以使用一步注册。 以下是来自他们docs的片段 -

此后端的工作流程尽可能简单:

  1. 用户通过填写注册表单进行注册。
  2. 用户帐户立即创建并立即处于活动状态,无需中间确认或激活步骤。
  3. 新用户立即登录。

如果您想在控制台中查看电子邮件,请改用以下 urlconf -

url(r'^account/', include('registration.backends.default.urls')),

希望能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接