Django-allauth:注册后发送欢迎电子邮件(无需验证)

13
我如何在Django应用程序(使用django-allauth)中向注册用户发送欢迎电子邮件?如果我设置ACCOUNT_EMAIL_VERIFICATION = ("mandatory"),它可以正常工作,并且用户会收到验证电子邮件。但是由于我不需要任何电子邮件验证,因此用户应该只需注册并收到欢迎电子邮件。

settings.py-

ACCOUNT_AUTHENTICATION_METHOD = ("email")
ACCOUNT_EMAIL_VERIFICATION = ("none")
ACCOUNT_SIGNUP_PASSWORD_VERIFICATION  = False
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
EMAIL_CONFIRMATION_SIGNUP = True
ACCOUNT_EMAIL_REQUIRED =True
LOGIN_REDIRECT_URL = '/'
LOGOUT_URL = '/'
ACCOUNT_LOGOUT_ON_GET =False
ACCOUNT_LOGOUT_REDIRECT_URL = '/'
SOCIALACCOUNT_QUERY_EMAIL = (ACCOUNT_EMAIL_REQUIRED)
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_AVATAR_SUPPORT = ( 'avatar' in INSTALLED_APPS)
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '##'
EMAIL_HOST_PASSWORD = '##'
EMAIL_PORT = 587
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

我有没有错过任何设置,导致欢迎注册邮件没有发送?还是必须通过我的视图来传递它?我似乎无法找到解决方法。任何帮助都将不胜感激。谢谢。

2个回答

26

没有这样的设置,但是你可以监听 user_signed_up 信号,在参数中将包含userrequest。一旦接收到信号,向用户发送电子邮件。

将下面的代码放在models.py文件中的某个位置:

from allauth.account.signals import user_signed_up
from django.dispatch import receiver

@receiver(user_signed_up, dispatch_uid="some.unique.string.id.for.allauth.user_signed_up")
def user_signed_up_(request, user, **kwargs):
    # user signed up now send email
    # send email part - do your self

1
谢谢您的回复!那个方法有效了!为了发送电子邮件,我使用send_mail('欢迎', '您在abc.com的注册成功。您的用户名是%s' %user.username, 'Hello hello@abc.com', [user.email])。虽然我不知道如何在这里使用模板(而不是单行文本)作为电子邮件正文,但我会想办法解决的,您的解决方案很好用!谢谢 - user_2000
dispatch_uid 的用途是什么? - Mohammad Kamrul Hasan
在可能发送重复信号的情况下,可以为信号接收器指定唯一标识符。有关更多信息,请参阅防止重复信号 - Aamir Rind

7

allauth只发送确认邮件。但是,它确实区分第一封(注册)确认邮件和随后的邮件(例如,当用户添加第二个电子邮件地址时)。

为此,allauth有一个“注册时电子邮件确认”模板(account/email/email_confirmation_signup_message.txtaccount/email/email_confirmation_signup_subject.txt)。

当使用内置模板时,这种混合确认/注册/欢迎邮件与常规电子邮件确认模板相同,但您可以覆盖它并将欢迎消息放在其中。此外,设置 ACCOUNT_EMAIL_VERIFICATION"optional"

如果所有这些都不符合您的需求,那么您可以连接到 user_signed_up 信号并自己发送简单的欢迎邮件。


谢谢,我不能使用“optional”,因为我不想在注册时发送确认电子邮件(即使用户没有验证)。也许我正在使用“user_signed_up”信号,这使它起作用。 - user_2000
你能分享一下你的user_signed_up信号吗? - milan

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