我该如何找出为什么django-allauth没有发送确认电子邮件?

7
我正在使用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éک»و­¢م€‚ - Domen Blenkuš
1
发送电子邮件不仅仅是从SMTP服务器中获取它。我写了一些需要注意的事项(如DKIM、SPF、反弹处理、PTR等),请参考https://github.com/fmalina/emails。我正在FlatmateRooms上使用此代码与allauth,并将其通用化和可配置化以开源化。 - fmalina
我尝试使用另一个适配器,但没有成功。我将尝试在django-allauth代码中设置一些断点,看看发生了什么。SES还提到没有发送电子邮件,所以我认为错误出在我的这边。我会随时更新你,感谢你的建议! - Benjamin Savoy
我想我找到了它的来源。确认电子邮件似乎不仅仅是在提交allauth SignupForm时发送。还有其他要添加的内容,我将查看视图并将其添加到我的视图中。这似乎是违反直觉的,但至少我找到了原因。 - Benjamin Savoy
2个回答

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...

0

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
>>>

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