예제 #1
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)
예제 #2
0
파일: utils.py 프로젝트: cundi/MixBBS
def get_bb_profile(user):
    from django.conf import settings

    if not user.is_authenticated():
        if settings.FORUM_ENABLE_ANONYMOUS_POST:
            user = get_user_model().objects.get(**{get_username_field(): settings.FORUM_ANONYMOUS_USERNAME})
        else:
            raise ValueError(_('Can\'t get profile for anonymous user'))

    if settings.FORUM_PROFILE_RELATED_NAME:
        return getattr(user, settings.FORUM_PROFILE_RELATED_NAME)
    else:
        return user
예제 #3
0
def get_bb_profile(user):
    from django.conf import settings

    if not user.is_authenticated():
        if settings.FORUM_ENABLE_ANONYMOUS_POST:
            user = get_user_model().objects.get(
                **{get_username_field(): settings.FORUM_ANONYMOUS_USERNAME})
        else:
            raise ValueError(_('Can\'t get profile for anonymous user'))

    if settings.FORUM_PROFILE_RELATED_NAME:
        return getattr(user, settings.FORUM_PROFILE_RELATED_NAME)
    else:
        return user
예제 #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)