Django:郵件功能實現


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM