django-users2和django的邮件功能模块都有相关的实现
-----------------------------------------------------------------------------------------
在所创建的项目下的settings下设置:
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users', 'bootstrap3', ] #-------------------------------------- #django-users2 AUTH_USER_MODEL = 'users.User' USERS_VERIFY_EMAIL = True #开启用户注册邮件验证 USERS_SPAM_PROTECTION = False #防止自动化注册的 True为开启 这个是我取消了防自动化验证功能,和email无关 #---------------------------
#Email-Settings EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_USE_TLS = False EMAIL_HOST = 'smtp.126.com' EMAIL_PORT = 25 EMAIL_HOST_USER = 'xautxuqiang' EMAIL_HOST_PASSWORD = '*******' DEFAULT_FROM_EMAIL = 'xautxuqiang@126.com'
注意哦:上面的EAMIL_HOST是126邮箱的smtp服务器,端口默认25.
EMAIL_HOST_USER和EMAIL_HOST_PASSWORD是邮件客户端的的账号和密码哦
这个需要下载相应的客户端注册账号哦。
DEFAULT_FROM_EMAIL就是向用户发送邮件的邮箱
完成以上配置就可以实现了....
-------------------------------------------------------------------------------------------
django-users2中注册时发送邮件相关的代码
if request.method == 'POST': form = registration_form(request.POST) if form.is_valid(): user = form.save() if settings.USERS_AUTO_LOGIN_AFTER_REGISTRATION: user.backend = 'django.contrib.auth.backends.ModelBackend' login(request, user) elif not user.is_active and settings.USERS_VERIFY_EMAIL: opts = { 'user': user, 'request': request, 'from_email': activation_from_email, 'email_template': activation_email_template_name, 'subject_template': activation_email_subject_template_name, 'html_email_template': activation_email_html_template_name, } send_activation_email(**opts) user_registered.send(sender=user.__class__, request=request, user=user) return redirect(post_registration_redirect) else: form = registration_form()
当 用户没被激活 且 配置settings 中的 USERS_VERIFY_EMAIL为True 时,向用户发送邮件
send_activation_send(**opts)函数 实现发送邮件
def send_activation_email( user=None, request=None, from_email=None, subject_template='users/activation_email_subject.html', email_template='users/activation_email.html', html_email_template=None): if not user.is_active and settings.USERS_VERIFY_EMAIL: token_generator = EmailActivationTokenGenerator() current_site = get_current_site(request) context = { 'email': user.email, 'site': current_site, 'expiration_days': settings.USERS_EMAIL_CONFIRMATION_TIMEOUT_DAYS, 'user': user, 'uid': urlsafe_base64_encode(force_bytes(user.pk)), 'token': token_generator.make_token(user=user), 'protocol': 'https' if request.is_secure() else 'http', } subject = render_to_string(subject_template, context) # email subject *must not* contain newlines subject = ''.join(subject.splitlines()) body = render_to_string(email_template, context) email_message = EmailMultiAlternatives(subject, body, from_email, [user.email]) if html_email_template is not None: html_email = render_to_string(html_email_template, context) email_message.attach_alternative(html_email, 'text/html') email_message.send()
user_registered.send()使用来产生一个用户注册的信号
# A new user has registered. user_registered = Signal(providing_args=['user', 'request'])