【问题标题】:How can I figure out why django-allauth isn't sending a confirmation e-mail?我怎样才能弄清楚为什么 django-allauth 没有发送确认电子邮件?
【发布时间】:2015-07-02 15:37:22
【问题描述】:

我正在使用 Django-allauth 并通过 Amazon SES 发送电子邮件。我希望所有帐户在登录之前验证他们的电子邮件,但电子邮件验证发送似乎静默失败。我查看了源代码,我看到我应该设置 DEFAULT_FROM_EMAIL,但它仍然不起作用。

这是我的配置,以防我忘记了任何明显的东西。我已将 django-smtp-ssl 安装为电子邮件后端。非常感谢您的帮助!

# E-mail

EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
EMAIL_HOST = 'email-smtp.us-west-2.amazonaws.com'
EMAIL_HOST_USER = os.environ['EMAIL_USER']
EMAIL_HOST_PASSWORD = os.environ['EMAIL_PASSWORD']
EMAIL_PORT = 465
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'Verified-email <verified-ses-email@example.com>'

# Auth

ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
SOCIALACCOUNT_EMAIL_VERIFICATION = True
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'

【问题讨论】:

  • EMAIL_BACKEND 更改为'django.core.mail.backends.console.EmailBackend',这样您就可以查看是否发送了电子邮件。如果已发送,则被 SES 阻止。
  • 发送电子邮件不仅仅是将其从 SMTP 服务器中取出。我写了一些要记住的事情(DKIM、SPF、反弹处理、PTR 等)github.com/fmalina/emails。我在 FlatmateRooms 上将此代码与 allauth 一起使用,现在使其通用且可配置以将其全部开源。
  • 我尝试使用另一个适配器,但没有运气。我将尝试在 django-allauth 代码中设置一些断点,看看发生了什么。 SES 还提到已发送 0 封电子邮件,所以我认为错误在我这边。我会及时通知您,感谢您的意见!
  • 我想我找到了它的来源。提交 allauth SignupForm 时似乎不会简单地发送确认电子邮件。还有其他要添加的内容,我将查看视图并将其添加到我的视图中。似乎违反直觉,但至少我找到了它发生的原因。

标签: django django-allauth amazon-ses


【解决方案1】:

终于找到了我缺少的东西。

在我的注册视图中,我又添加了一行:

from allauth.account.utils import complete_signup
from allauth.account import app_settings
# some other code
def signup(request):
    if request.method == 'POST':
        form = UserCreateForm(request.POST)
        if form.is_valid():
            user = form.save(request)
            # Added this!
            complete_signup(request, user,app_settings.EMAIL_VERIFICATION, "/")
            # etc...

【讨论】:

    【解决方案2】:

    DEFAULT_FROM_EMAIL 应该是EMAIL_HOST 上的有效地址。

    您也可以如下验证。

    $ python manage.py shell
    Python 2.7.9 (default, Jun 29 2016, 13:08:31)
    [GCC 4.9.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from django.conf import settings
    >>> settings.EMAIL_BACKEND
    'django.core.mail.backends.smtp.EmailBackend'
    >>> from django.core.mail import send_mail
    >>> send_mail('test message', 'this is a test message', settings.DEFAULT_FROM_EMAIL, ['recipient@example.com'])
    1
    >>>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2011-12-19
      • 2023-04-01
      • 1970-01-01
      • 2014-04-09
      • 2016-07-02
      相关资源
      最近更新 更多