【问题标题】:send activate-email with django-registration使用 django-registration 发送激活电子邮件
【发布时间】:2011-02-23 02:24:58
【问题描述】:

我很好奇是否有办法使用 django-registration 发送带有用户名、密码的激活电子邮件。首先我想修改注册表,但我需要一些例子。

【问题讨论】:

  • 不要在电子邮件中发送用户密码。

标签: python django django-registration


【解决方案1】:

django-registration 在内部使用以下代码来处理发送电子邮件:

send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.user.email])

如果你想工作,你必须在你的 settings.py 中指定值 DEFAULT_FROM_EMAIL。

另外,请注意以下几点:

邮件使用 SMTP 主机发送,并且 EMAIL_HOST 中指定的端口和 EMAIL_PORT 设置。这 EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD 设置,如果设置, 用于对 SMTP 进行身份验证 服务器和 EMAIL_USE_TLS 设置 控制是否安全连接 被使用了。

因此,举个例子,这是我在 settings.py 文件中使用 gmail 帐户的内容:

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 465
EMAIL_USE_TLS = True

EMAIL_HOST_USER = 'my@gmail.com'
EMAIL_HOST_PASSWORD = 'my_emails_password'

django-registration 应该可以发送电子邮件了。

【讨论】:

  • 并且,为了记录,给其他设置电子邮件的人 - 不要犯我犯的错误,在端口周围使用引号,如EMAIL_PORT='587' .这花了我几个小时的调试时间......
  • 感谢您的提示,我再次检查了错误的电子邮件配置 - 使用 gmail 帐户设置后才发现 4 行,我已经为一些无意义的 localhost 帐户设置了它!问题?解决了。​​
  • 我认为我们必须在EMAIL_USE_TLS = True时使用EMAIL_PORT = 587
【解决方案2】:

EMAIL_PORT = 465 是在几年前工作的。现在您需要将 587 端口与 gmail 一起使用。 原因:Django 从一开始就不支持带有 SSL 的 SMTP。设置纯文本连接后,仅支持 STARTTLS 命令。但是,Gmail 在端口 465 上不再支持此选项。

【讨论】:

    【解决方案3】:

    希望这会对某人有所帮助。排查了半个小时后,我意识到我在使用 django-registration 时也必须明确说明这一点-

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

    【讨论】:

      【解决方案4】:

      django-register-activate 实现了与 django-registration 类似的功能。基本上它为用户注册、电子邮件验证和激活、用户登录和用户注销提供代码。

      如果您需要示例来实现自己的代码,您可以查看register_activate 中的views.py 和forms.py 以获得一些提示。

      希望答案有所帮助。如果您还有其他问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 2017-05-17
        • 2010-11-22
        • 2013-05-26
        • 2016-03-26
        • 2011-01-02
        • 1970-01-01
        相关资源
        最近更新 更多