zoukankan      html  css  js  c++  java
  • 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'])
  • 相关阅读:
    原创 记录一次线上Mysql慢查询问题排查过程
    原创 |我是如何解决POI解析Excel出现的OOM问题的?
    FastJson序列化时候出现了$ref?还不赶紧学习下
    fastjson自定义序列化竟然有这么多姿势?
    SpringBoot2.0整合WebSocket,实现后端数据实时推送!
    SpringMVC+Mybatis 如何配置多个数据源并切换?
    异常: java.security.InvalidKeyException: Illegal key size
    一分钟带你了解下MyBatis的动态SQL!
    一分钟带你了解下Spring Security!
    历时七天,史上最强MySQL优化总结,从此优化So Easy!
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6732625.html
Copyright © 2011-2022 走看看