예제 #1
0
    def test_send_mass_mail(self):
        with self.settings(MAILER_EMAIL_BACKEND=
                           "django.core.mail.backends.locmem.EmailBackend"):
            mails = (
                ("Subject ☺", "Body", "*****@*****.**",
                 ["*****@*****.**"]),
                ("Subject ☺", "Body", "*****@*****.**",
                 ["*****@*****.**"]),
                ("Subject ☺", "Body", "*****@*****.**",
                 ["*****@*****.**"]),
                ("Subject ☺", "Body", "*****@*****.**",
                 ["*****@*****.**"]),
            )

            mailer.send_mass_mail(mails)

            self.assertEqual(Message.objects.count(), 4)
            self.assertEqual(Message.objects.deferred().count(), 0)

            engine.send_all()

            self.assertEqual(Message.objects.count(), 0)
            self.assertEqual(Message.objects.deferred().count(), 0)

            self.assertEqual(len(mail.outbox), 4)
            for i, sent in enumerate(mail.outbox):
                # Default "plain text"
                self.assertEqual(sent.subject, "Subject ☺")
                self.assertEqual(sent.from_email,
                                 "mass{0}@example.com".format(i))
                self.assertEqual(sent.to,
                                 ["recipient{0}@example.com".format(i)])
예제 #2
0
    def test_send_mass_mail(self):
        with self.settings(MAILER_EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend"):
            mails = (
                ("Subject ☺", "Body", "*****@*****.**", ["*****@*****.**"]),
                ("Subject ☺", "Body", "*****@*****.**", ["*****@*****.**"]),
                ("Subject ☺", "Body", "*****@*****.**", ["*****@*****.**"]),
                ("Subject ☺", "Body", "*****@*****.**", ["*****@*****.**"]),
            )

            mailer.send_mass_mail(mails)

            self.assertEqual(Message.objects.count(), 4)
            self.assertEqual(Message.objects.deferred().count(), 0)

            engine.send_all()

            self.assertEqual(Message.objects.count(), 0)
            self.assertEqual(Message.objects.deferred().count(), 0)

            self.assertEqual(len(mail.outbox), 4)
            for i, sent in enumerate(mail.outbox):
                # Default "plain text"
                self.assertEqual(sent.subject, "Subject ☺")
                self.assertEqual(sent.from_email, "mass{0}@example.com".format(i))
                self.assertEqual(sent.to, ["recipient{0}@example.com".format(i)])
예제 #3
0
def notify_topic_subscribers(post):
    """
    邮件订阅提醒通过email送出
    :param post:
    :return:
    """
    topic = post.topic
    if post != topic.head:
        old_lang = translation.get_language()

        # Define constants for templates rendering
        delete_url = reverse('bb:delete_subscription', args=[post.topic.id])
        current_site = Site.objects.get_current()
        from_email = settings.DEFAULT_FROM_EMAIL

        subject = render_to_string('mail/subscription_email_subject.html', {
            'site': current_site,
            'post': post
        })
        # Email subject *must not* contain newlines
        subject = ''.join(subject.splitlines())

        mails = tuple()
        for user in topic.subscribers.exclude(pk=post.user.pk):
            try:
                validate_email(user.email)
            except:
                # Invalid email
                continue

            if user.email == '*****@*****.**' % getattr(
                    user, compat.get_username_field()):
                continue

            lang = utils.get_bb_profile(
                user).language or settings.LANGUAGE_CODE
            translation.activate(lang)

            message = render_to_string(
                'mail/subscription_email_body.html', {
                    'site': current_site,
                    'post': post,
                    'delete_url': delete_url,
                    'user': user
                })
            mails += ((subject, message, from_email, [user.email]), )

        # Send mails
        send_mass_mail(mails, fail_silently=True)

        # Reactivate previous language
        translation.activate(old_lang)
예제 #4
0
def notify_topic_subscribers(post):
    """
    邮件订阅提醒通过email送出
    :param post:
    :return:
    """
    topic = post.topic
    if post != topic.head:
        old_lang = translation.get_language()

        # Define constants for templates rendering
        delete_url = reverse('bb:delete_subscription', args=[post.topic.id])
        current_site = Site.objects.get_current()
        from_email = settings.DEFAULT_FROM_EMAIL

        subject = render_to_string('mail/subscription_email_subject.html',
                                   {'site': current_site,
                                    'post': post})
        # Email subject *must not* contain newlines
        subject = ''.join(subject.splitlines())

        mails = tuple()
        for user in topic.subscribers.exclude(pk=post.user.pk):
            try:
                validate_email(user.email)
            except:
                # Invalid email
                continue

            if user.email == '*****@*****.**' % getattr(user, compat.get_username_field()):
                continue

            lang = utils.get_bb_profile(user).language or settings.LANGUAGE_CODE
            translation.activate(lang)

            message = render_to_string('mail/subscription_email_body.html',
                                       {'site': current_site,
                                        'post': post,
                                        'delete_url': delete_url,
                                        'user': user})
            mails += ((subject, message, from_email, [user.email]),)

        # Send mails
        send_mass_mail(mails, fail_silently=True)

        # Reactivate previous language
        translation.activate(old_lang)
예제 #5
0
def notify_topic_subscribers(post):
    topic = post.topic
    old_lang = translation.get_language()

    # Define constants for templates rendering
    context_vars = {
        'delete_url': reverse('pybb:delete_subscription',
                              args=[post.topic.id]),
        'site_url': get_setting('site', 'global', 'siteurl'),
        'is_new_topic': post == topic.head,
        'post': post,
        'post_url': reverse('pybb:post', args=[post.id]),
        'forum_url': reverse('pybb:forum', args=[topic.forum.id]),
    }
    from_email = settings.DEFAULT_FROM_EMAIL

    mails = tuple()
    if post == topic.head:
        subject_template = 'pybb/mail_templates/moderator_email_subject.html'
        users = topic.forum.moderators.all()
    else:
        subject_template = 'pybb/mail_templates/subscription_email_subject.html'
        users = topic.subscribers.exclude(pk=post.user.pk)

    subject = render_to_string(template_name=subject_template,
                               context={
                                   'site_url': context_vars['site_url'],
                                   'post': post,
                                   'topic': topic
                               })
    # Email subject *must not* contain newlines
    subject = ''.join(subject.splitlines())

    for user in users:
        message = get_email_message(user, **context_vars)
        if message:
            message = add_tendenci_footer(message, content_type="text")
            mails += ((subject, message, from_email, [user.email]), )

    # Send mails
    send_mass_mail(mails, fail_silently=True)

    # Reactivate previous language
    translation.activate(old_lang)
예제 #6
0
파일: views.py 프로젝트: MechanisM/pycon
def campaign_submit(request, pk):
    if request.method != "POST":
        return HttpResponseNotAllowed(["POST"])
    campaigns = Campaign.objects.select_related("email_template")
    campaign = get_object_or_404(campaigns, pk=pk)
    messages = []
    for user in campaign:
        email_ctx = {
            "user": user,
        }
        messages.append((
            campaign.email_template.render_subject(email_ctx),
            campaign.email_template.render_body(email_ctx),
            campaign.from_address,
            [user.email],
        ))
    send_mass_mail(messages)
    campaign.sent = datetime.datetime.now()
    campaign.save()
    return redirect("campaign_review", campaign.pk)
예제 #7
0
def notify_topic_subscribers(post):
    topic = post.topic
    old_lang = translation.get_language()

    # Define constants for templates rendering
    context_vars = {'delete_url': reverse('pybb:delete_subscription', args=[post.topic.id]),
                    'site_url': get_setting('site', 'global', 'siteurl'),
                    'is_new_topic': post == topic.head,
                    'post': post,
                    'post_url': reverse('pybb:post', args=[post.id]),
                    'forum_url': reverse('pybb:forum', args=[topic.forum.id]),
                    }
    from_email = settings.DEFAULT_FROM_EMAIL

    mails = tuple()
    if post == topic.head:
        subject_template = 'pybb/mail_templates/moderator_email_subject.html'
        users = topic.forum.moderators.all()
    else:
        subject_template = 'pybb/mail_templates/subscription_email_subject.html'
        users = topic.subscribers.exclude(pk=post.user.pk)

    subject = render_to_string(subject_template,
                                   {'site_url': context_vars['site_url'],
                                    'post': post,
                                    'topic': topic})
    # Email subject *must not* contain newlines
    subject = ''.join(subject.splitlines())

    for user in users:
        message = get_email_message(user, **context_vars)
        if message:
            message = add_tendenci_footer(message, content_type="text")
            mails += ((subject, message, from_email, [user.email]),)

    # Send mails
    send_mass_mail(mails, fail_silently=True)

    # Reactivate previous language
    translation.activate(old_lang)
예제 #8
0
파일: utils.py 프로젝트: hazarin/sdtest
def mail_delivery():
    precedents = get_popular()
    yesterday = timezone.now() - timezone.timedelta(days=1)
    # Список пользователей с предпочтениями по которым не было рассылки больше дня
    participants = \
        Participant.objects \
            .filter(user__isnull=False, user__delivery_at__lte=yesterday, user__emailaddress__verified=True) \
            .select_related('user') \
            .prefetch_related(Prefetch(
                'precedents',
                queryset=Precedent.objects.all(),
                to_attr='precedents_cache'
            ))[:50]
    participants_list = list(participants)
    if len(participants_list) > 0:
        precedent_ids = [item['precedent_id'] for item in precedents]
        emails = []
        users = []
        template = loader.get_template('mail.txt')
        for item in participants_list:
            user_precedents = [value.precedent_id for value in item.precedents_cache]
            # Проверка на отсутствие у пользователя предпочтений из кэшированного списка
            to_send = set(precedent_ids) - set(user_precedents)
            users.append(item.user)
            if len(to_send) > 0:
                precedents_list = [precedents[precedent_ids.index(value)] for key, value in enumerate(to_send) if key < 3]
                item.user.delivery_at = timezone.now()
                emails.append((
                    _('Popular precedents'),
                    template.render({'precedents_list': precedents_list}),
                    settings.DEFAULT_FROM_EMAIL,
                    [item.user.email]
                ))
        if len(emails) > 0:
            mailer.send_mass_mail(tuple(emails), fail_silently=False)
        AppUser.objects.bulk_update(users, ['delivery_at'])