Exemplo n.º 1
0
    def save_model(self, request, obj, form, change):
        if not obj.pk:
            obj.author = request.user

        send_newsletter = (not obj.newsletter_sended) and (obj.status == 1) and ((not obj.pk) or (form.has_changed() and 'status' in form.changed_data))
        super().save_model(request, obj, form, change)
        
        if send_newsletter:
            current_site = get_current_site(request)
            subject = 'Newsletter - ' + obj.title
            
            with get_connection('newsletter') as connection:
                from_email = None
                if hasattr(connection, 'username'):
                    from_email = connection.username
        
                profiles = Profile.objects.filter(signup_confirmation=True, newsletter_subscription=True).all()
                for profile in profiles:
                    message = render_to_string('blog/newsletter.html', {
                        'profile': profile,
                        'protocol': settings.PROTOCOL,
                        'domain': current_site.domain,
                        'post': obj,
                    })
                    try:
                        profile.user.email_user(subject, '', html_message=message, connection=connection)
                    except Exception as err:
                        print(err)     
            
            obj.newsletter_sended = True
            super().save_model(request, obj, form, change)
Exemplo n.º 2
0
def profile(request):
    if not request.user.is_authenticated:
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

    user = request.user
    data = {
        'username': user.username,
        'first_name': user.first_name,
        'last_name': user.last_name,
        'email': user.email,
        'newsletter_subscription': user.profile.newsletter_subscription,
    }

    if request.method == 'POST':
        form = ProfileForm(data=request.POST, instance=request.user)
        if form.is_valid():
            user = form.save()
            user.refresh_from_db()
            user.username = form.cleaned_data.get('username')
            user.profile.first_name = form.cleaned_data.get('first_name')
            user.profile.last_name = form.cleaned_data.get('last_name')
            user.profile.email = form.cleaned_data.get('email')
            user.profile.newsletter_subscription = form.cleaned_data.get(
                'newsletter_subscription')
            user.save()

            if form.has_changed() and 'email' in form.changed_data:
                # user can't login until link confirmed
                user.is_active = False
                user.save()

                current_site = get_current_site(request)
                subject = 'Vérifier votre nouveau courriel'
                # load a template like get_template()
                # and calls its render() method immediately.
                message = render_to_string(
                    'registration/activation_request.html',
                    {
                        'user': user,
                        'protocol': settings.PROTOCOL,
                        'domain': current_site.domain,
                        'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                        # method will generate a hash value with user related data
                        'token': account_activation_token.make_token(user),
                    })
                with get_connection('registration') as connection:
                    from_email = None
                    if hasattr(connection, 'username'):
                        from_email = connection.username
                    user.email_user(subject,
                                    message,
                                    from_email=from_email,
                                    connection=connection)
                return redirect('activation_sent')
        else:
            print(form.errors)
    else:
        form = ProfileForm(data, instance=request.user)
    return render(request, 'core/profile.html', {'form': form})
Exemplo n.º 3
0
    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('Send mails in queue'))

        emails_to = list(
            Person.objects.exclude(email__isnull=True).exclude(
                email__exact='').values_list('email', flat=True).distinct())
        self.stdout.write(
            self.style.SUCCESS('Number of contacts : %s' % len(emails_to)))

        messages = Message.objects.filter(status=0).all()
        self.stdout.write(
            self.style.SUCCESS('Number of emails : %s' % len(messages)))

        if len(messages) > 0:
            for message in messages:
                message.status = 1
                message.save()

            with get_connection('message') as connection:
                for message in messages:
                    m = render_to_string('contacts_messages/message.html',
                                         {'content': message.body})

                    files = []
                    for file in message.attachments.all():
                        f = file.attachment
                        files.append((os.path.basename(f.name), f.read()))

                    total = 0
                    for i in range(0, len(emails_to), 50):
                        emails = emails_to[i:i + 50]
                        total = total + len(emails)
                        if total > 200:
                            time.sleep(3700)
                            total = len(emails)
                        try:
                            mail = EmailMultiAlternatives(
                                subject=message.subject,
                                from_email=connection.username,
                                bcc=emails,
                                connection=connection)

                            mail.attach_alternative(m, 'text/html')
                            for file in files:
                                mail.attach(*file)
                            mail.send()
                        except Exception as err:
                            self.stderr.write(self.style.ERROR(err))

                    message.status = 2
                    message.save()

        self.stdout.write(self.style.SUCCESS('Finished'))
Exemplo n.º 4
0
def signup_view(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            user.refresh_from_db()
            user.profile.first_name = form.cleaned_data.get('first_name')
            user.profile.last_name = form.cleaned_data.get('last_name')
            user.profile.email = form.cleaned_data.get('email')
            user.profile.newsletter_subscription = form.cleaned_data.get(
                'newsletter_subscription')
            # user can't login until link confirmed
            user.is_active = False
            user.save()

            current_site = get_current_site(request)
            subject = 'Activation de votre compte'
            # load a template like get_template()
            # and calls its render() method immediately.
            message = render_to_string(
                'registration/activation_request.html',
                {
                    'user': user,
                    'protocol': settings.PROTOCOL,
                    'domain': current_site.domain,
                    'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                    # method will generate a hash value with user related data
                    'token': account_activation_token.make_token(user),
                })
            with get_connection('registration') as connection:
                from_email = None
                if hasattr(connection, 'username'):
                    from_email = connection.username
                user.email_user(subject,
                                message,
                                from_email=from_email,
                                connection=connection)
            return redirect('activation_sent')
    else:
        form = SignUpForm()
    return render(request, 'core/signup.html', {'form': form})
Exemplo n.º 5
0
    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('Send mails in queue'))

        emails_to = list(
            Person.objects.exclude(email__isnull=True).exclude(
                email__exact='').values('email').distinct())
        emails_to = [e['email'] for e in emails_to]
        self.stdout.write(
            self.style.SUCCESS('Number of contacts : %s' % len(emails_to)))

        messages = Message.objects.filter(sended=False).all()
        self.stdout.write(
            self.style.SUCCESS('Number of emails : %s' % len(messages)))

        with get_connection('message') as connection:
            for message in messages:
                m = render_to_string('contacts_messages/message.html',
                                     {'content': message.body})

                for i in range(0, len(emails_to), 50):
                    try:
                        mail = EmailMultiAlternatives(
                            subject=message.subject,
                            from_email=connection.username,
                            bcc=emails_to[i:i + 50],
                            connection=connection)
                        for file in message.attachments.all():
                            f = file.attachment
                            mail.attach(os.path.basename(f.name), f.read())
                        mail.attach_alternative(m, 'text/html')
                        mail.send()
                    except Exception as err:
                        self.stderr.write(self.style.ERROR(err))

                message.sended = True
                message.save()

        self.stdout.write(self.style.SUCCESS('Finished'))