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'])