예제 #1
0
def send_mail(subject,
              template_name,
              context_dict,
              from_email=None,
              to_emails=None,
              language_code=None):
    """
    Send email with specified template and context.
    """
    if not to_emails:
        LOG.warning("Email will not be sent: no recipients were specified")
        return
    from_email = from_email or settings.DEFAULT_FROM_EMAIL

    if language_code:
        activate(language_code)
        html_part = render_to_string(template_name, context_dict)
        deactivate()
    else:
        html_part = render_to_string(template_name, context_dict)
    text_part = strip_tags(html_part).strip()

    msg = EmailMultiAlternatives(subject, text_part, from_email, to_emails)
    msg.attach_alternative(html_part, "text/html")

    try:
        msg.send(fail_silently=False)
        return True
    except Exception as e:
        LOG.error('Failed to send message to {to}: {err}'.format(
            to=repr(to_emails), err=unicode(e)))
        return False
예제 #2
0
    def send_mail(self, template_prefix, email, context):
        """
        Sends an e-mail to `email`.  `template_prefix` identifies the
        e-mail that is to be sent, e.g. "account/email/email_confirmation"
        """
        subject = render_to_string('{0}_subject.txt'.format(template_prefix),
                                   context)
        # remove superfluous line breaks
        subject = " ".join(subject.splitlines()).strip()
        subject = self.format_email_subject(subject)

        bodies = {}
        for ext in ['html', 'txt']:
            try:
                template_name = '{0}_message.{1}'.format(template_prefix, ext)
                bodies[ext] = render_to_string(template_name,
                                               context).strip()
            except TemplateNotFound:
                if ext == 'txt' and not bodies:
                    # We need at least one body
                    raise
        if 'txt' in bodies:
            msg = EmailMultiAlternatives(subject, 
                                         bodies['txt'], 
                                         settings.DEFAULT_FROM_EMAIL,
                                         [email])
            if 'html' in bodies:
                msg.attach_alternative(bodies['html'], 'text/html')
        else:
            msg = EmailMessage(subject, 
                               bodies['html'], 
                               settings.DEFAULT_FROM_EMAIL, 
                               [email])
            msg.content_subtype = 'html'  # Main content is now text/html
        msg.send()
예제 #3
0
파일: models.py 프로젝트: gabrielx52/baph
    def send_activation_email(self):
        """
        Sends a activation email to the user.

        This email is send when the user wants to activate their newly created
        user.

        """
        context = {'user': self.user,
                  'without_usernames': settings.BAPH_AUTH_WITHOUT_USERNAMES,
                  'protocol': get_protocol(),
                  'activation_days': settings.BAPH_ACTIVATION_DAYS,
                  'activation_key': self.activation_key,
                  'org': Organization.get_current(),
                  }

        subject = render_to_string('registration/emails/activation_email_subject.txt',
                                   context)
        subject = ''.join(subject.splitlines())

        message = render_to_string('registration/emails/activation_email_message.txt',
                                   context)
        send_mail(subject,
                  message,
                  django_settings.DEFAULT_FROM_EMAIL,
                  [self.user.email, ])
예제 #4
0
 def _pre_test_email(self):
     template = 'piston/mails/consumer_%s.txt' % self.consumer.status
     try:
         render_to_string(template, {
             'consumer': self.consumer,
             'user': self.cuser,
         })
         return True
     except TemplateNotFound:
         '''They haven't set up the templates, which means they might not
         want these emails sent.
         '''
         return False
예제 #5
0
파일: forms.py 프로젝트: ReadBox/readbox
    def send_activation_mail(self):
        context = dict(
            user=self.user,
        )
        rendered_body = shortcuts.render_to_string(
            'auth/email/activation_body.txt', context)
        rendered_subjet = shortcuts.render_to_string(
            'auth/email/activation_subject.txt', context)

        mail.send_mail(
            rendered_subjet,
            rendered_body,
            settings.DEFAULT_FROM_EMAIL,
            [self.user.email],
        )
예제 #6
0
파일: forms.py 프로젝트: ReadBox/readbox
    def send_reset_mail(self, user):
        context = dict(
            user=user,
        )
        rendered_body = shortcuts.render_to_string(
            'auth/email/reset_body.txt', context)
        rendered_subjet = shortcuts.render_to_string(
            'auth/email/reset_subject.txt', context)

        mail.send_mail(
            rendered_subjet,
            rendered_body,
            settings.DEFAULT_FROM_EMAIL,
            [user.email],
        )
예제 #7
0
  def build(self, context, headers=None):

    # Activate language
    translation.activate(self.language)

    # Render template
    site = get_current_site(None)
    message = u'Envoyé via %s' % site
    context.update({
      'site' : site,
    })
    mail_html = render_to_string(self.template, context)
    if settings.DEBUG:
      self.dump(mail_html)

    # Configure mail
    mail = EmailMultiAlternatives(self.subject, message, headers=headers)
    mail.to = self.to
    mail.cc = self.cc

    # Attach the rendered html
    mail.attach_alternative(mail_html, 'text/html')

    # Do not send, it's responsability of caller
    return mail
 def paginate(request, queryset_or_list, per_page=25):
     context_instance = RequestContext(request)
     context = paginate_func(request, queryset_or_list, per_page)
     paging = Markup(
         render_to_string('paging/pager.html', context, context_instance))
     return dict(objects=context['paginator'].get('objects', []),
                 paging=paging)
예제 #9
0
 def media_js(self, request):
     settings = self.get_settings()
     request_parameters = settings.get('REQUEST_PARAMETERS', {})
     ctx = { 'request_parameters': json.dumps(request_parameters) }
     return render_to_string('persona/auth.html',
                             ctx,
                             RequestContext(request))
def paginate(context,
             queryset_or_list,
             request,
             asvar,
             per_page=25,
             is_endless=True):
    """{% paginate queryset_or_list from request as foo[ per_page 25][ is_endless False %}"""

    from django.template.loader import render_to_string

    context_instance = RequestContext(request)
    paging_context = paginate_func(request,
                                   queryset_or_list,
                                   per_page,
                                   endless=is_endless)
    paging = mark_safe(
        render_to_string('paging/pager.html', paging_context,
                         context_instance))

    result = dict(objects=paging_context['paginator'].get('objects', []),
                  paging=paging,
                  paginator=paging_context['paginator'])
    if asvar:
        context[asvar] = result
        return ''
    return result
예제 #11
0
파일: forms.py 프로젝트: dieselmachine/baph
 def save(self,
          domain_override=None,
          email_template_name='registration/password_reset_email.html',
          use_https=False,
          token_generator=default_token_generator,
          request=None):
     '''Generates a one-use only link for resetting password and sends to
     the user.
     '''
     from django.core.mail import send_mail
     for user in self.users_cache:
         if not domain_override:
             current_site = get_current_site(request)
             site_name = current_site.name
             domain = current_site.domain
         else:
             site_name = domain = domain_override
         c = {
             'email': user.email,
             'domain': domain,
             'site_name': site_name,
             'uid': int_to_base36(user.id.int),
             'user': user,
             'token': token_generator.make_token(user),
             'protocol': use_https and 'https' or 'http',
         }
         body = render_to_string(email_template_name, c)
         send_mail(
             _("Password reset on %s") % site_name, body, None,
             [user.email])
예제 #12
0
파일: views.py 프로젝트: ricree/Mafiastats
def buildPlayerGraph(player, playerset, teamset):
    if player.id in playerset:
        return
    playerset.add(player.id)
    node = cache.get("mafiastats_player_graph_" + str(player.id))
    teams = player.team_set.all()
    if not node:
        wonlist = [t for t in teams if t.won]
        lostlist = [t for t in teams if not t.won]
        adj = [{"nodeTo": "t" + str(team.id), "data": {}} for team in teams]
        node = {
            "id": "p" + str(player.id),
            "name": player.name,
            "data": {
                "infobox": render_to_string(
                    "playerGraphInfo.html", {"player": player, "wonlist": wonlist, "lostlist": lostlist}
                )
            },
            "adjacencies": adj,
        }
        cache.set("mafiastats_player_graph_" + str(player.id), node, 30 * 60)
    yield node
    for team in teams:
        for n in buildTeamGraph(team, playerset, teamset):
            yield n
예제 #13
0
def render_to_string(template, context, request=None):
    if request:
        context_instance = RequestContext(request)
    else:
        context_instance = None

    return shortcuts.render_to_string(template, context, context_instance)
예제 #14
0
def render_to_string(request, template, context):
    if request:
        context_instance = RequestContext(request)
    else:
        context_instance = None

    return shortcuts.render_to_string(template, context, context_instance)
예제 #15
0
파일: models.py 프로젝트: gabrielx52/baph
    def send_confirmation_email(self):
        """
        Sends an email to confirm the new email address.

        This method sends out two emails. One to the new email address that
        contains the ``email_confirmation_key`` which is used to verify this
        this email address with :func:`UserenaUser.objects.confirm_email`.

        The other email is to the old email address to let the user know that
        a request is made to change this email address.

        """
        context = {'user': self.user,
                  'without_usernames': settings.BAPH_AUTH_WITHOUT_USERNAMES,
                  'new_email': self.email_unconfirmed,
                  'protocol': get_protocol(),
                  'confirmation_key': self.email_confirmation_key,
                  'org': Organization.get_current(),
                  }

        # Email to the old address, if present
        subject_old = render_to_string(
            'registration/emails/confirmation_email_subject_old.txt', context)
        subject_old = ''.join(subject_old.splitlines())

        message_old = render_to_string(
            'registration/emails/confirmation_email_message_old.txt', context)
        if self.user.email:
            send_mail(subject_old,
                      message_old,
                      django_settings.DEFAULT_FROM_EMAIL,
                    [self.user.email])

        # Email to the new address
        subject_new = render_to_string(
            'registration/emails/confirmation_email_subject_new.txt', context)
        subject_new = ''.join(subject_new.splitlines())

        message_new = render_to_string(
            'registration/emails/confirmation_email_message_new.txt', context)

        send_mail(subject_new,
                  message_new,
                  django_settings.DEFAULT_FROM_EMAIL,
                  [self.email_unconfirmed, ])
예제 #16
0
def send_html_email(template_path, context, subject, from_email, to_emails):
    """Renders an email template using render_to_string twice, once with render_type = 'text'
    and once with render_type = 'html', then sends an email with the given parameters
    with a text/html alternative."""

    # render templates
    context['render_type'] = 'text'
    text_content = render_to_string(template_path, context)
    context['render_type'] = 'html'
    html_content = render_to_string(template_path, context)
    html_content = defaultfilters.linebreaks(html_content)

    # send email
    message = EmailMultiAlternatives(subject, text_content, from_email, to_emails)
    message.attach_alternative(html_content, 'text/html')
    message.send()

    return True
예제 #17
0
def mail_admins_template(subject, template, context, fail_silently=False, connection=None, html_template=None):
    """Accepts a subject, template, context, (and optionally fail_silently,
    connection, and html_template), renders the template(s) using the context,
    and mails the admins using the templates and parameters via django.core.mail.mail_admins"""

    # render the message template - or fall back to blank if none given - requires html_template
    if not template and html_template:
        message = ''
    else:
        message = render_to_string(template, context)

    # renders html_template if applicable
    html_message = None
    if html_template:
        html_message = render_to_string(html_template, context)

    # sends the email
    mail_admins(subject, message, fail_silently, connection, html_message)
예제 #18
0
def send_html_email(template_path, context, subject, from_email, to_emails):
    """Renders an email template using render_to_string twice, once with render_type = 'text'
    and once with render_type = 'html', then sends an email with the given parameters
    with a text/html alternative."""

    # render templates
    context['render_type'] = 'text'
    text_content = render_to_string(template_path, context)
    context['render_type'] = 'html'
    html_content = render_to_string(template_path, context)
    html_content = defaultfilters.linebreaks(html_content)

    # send email
    message = EmailMultiAlternatives(subject, text_content, from_email,
                                     to_emails)
    message.attach_alternative(html_content, 'text/html')
    message.send()

    return True
예제 #19
0
    def render_template(self, template_name, context):
        """Render a template.

        :param template_name: Template name.
        :type template_name: str
        :param context: Context.
        :returns: the rendered template.
        """

        return render_to_string(template_name, context)
예제 #20
0
 def add_message(self, request, level, message_template, message_context={}, extra_tags=''):
     """
     Wrapper of `django.contrib.messages.add_message`, that reads
     the message text from a template.
     """
     try:
         message = render_to_string(message_template,
                                    message_context).strip()
         if message:
             messages.add_message(request, level, message, extra_tags=extra_tags)
     except TemplateNotFound:
         pass
예제 #21
0
def page_404(request):

    view_vars = {
        "page":  Page({
        "category": None,
        "title": '404',
        }, request, ad_settings=settings.DART_AD_DEFAULTS),
        'gpt': {
            'ad_unit': '/{}/{}'.format(settings.GPT_NETWORK_CODE, settings.GPT_BASE_AD_UNIT_PATH),
        }
    }


    if settings.SITE_NAME == "Nextgov":
        return HttpResponseNotFound(render_to_string("nextgov/content/main/404.html", view_vars, context_instance=RequestContext(request)))
    elif settings.SITE_NAME == "Defense One":
        return HttpResponseNotFound(render_to_string("defenseone/content/main/404.html", view_vars, context_instance=RequestContext(request)))
    elif settings.SITE_NAME == "Route Fifty":
        return HttpResponseNotFound(render_to_string("route_fifty/404.html", view_vars, context_instance=RequestContext(request)))
    else:
        return HttpResponseNotFound(render_to_string("content/main/404.html", view_vars, context_instance=RequestContext(request)))
예제 #22
0
def render_to_string(template_name, context=None, request=None,
                     processors=None):
    """Render a template into a string."""
    context = dict(context or {})
    if request is not None:
        context['request'] = request
        context_instance = RequestContext(request)
        for processor in chain(get_standard_processors(), processors or ()):
            context.update(processor(request)) 
    else:
        context_instance = None
    return shortcuts.render_to_string(template_name, context, context_instance)
예제 #23
0
    def send(self, to, context={}, tags=None, metadata=None):
        """Send the e-mail.

        :param to: Recipient of the e-mail.
        :param context: Recipient-specific template context.
        """

        # Construct the local context.
        local_context = {}
        if self.context:
            for k, v in self.context.items():
                local_context[k] = v
        if context:
            for k, v in context.items():
                local_context[k] = v

        # Render what needs to be rendered.
        subject = None
        if self.subject_template_name:
            subject = ''.join(render_to_string(self.subject_template_name,
                                               local_context)
                              .strip()
                              .splitlines())

        text_body = render_to_string(self.text_template_name,
                                     local_context).strip()

        html_body = None
        if self.html_template_name:
            html_body = render_to_string(self.html_template_name,
                                         local_context).strip()

        super(TemplateMail, self).send(
            to = to,
            text_body = text_body,
            html_body = html_body,
            subject = subject,
            tags = tags,
            metadata = metadata,
        )
예제 #24
0
파일: helpers.py 프로젝트: La0/beers
    def wrapper(request, *args, **kwargs):
      try:
        context = view_func(request, *args, **kwargs)
        if not context:
          raise Exception('No context generated')
        
        # Skip render on redirect
        if isinstance(context, HttpResponseRedirect):
          return context

        # Add some settings to context
        context['DEBUG'] = DEBUG
        context['IS_AJAX'] = request.is_ajax()
        #context['GOOGLE_ANALYTICS'] = GOOGLE_ANALYTICS

        # Ajax render using json
        if request.is_ajax() and json_template:
          
          # Render the template to html
          html = render_to_string(json_template, context)
          json_data = {
            'status' : 'ok',
            'html' : html,
          }
          
          resp = HttpResponse(mimetype='application/json')
          resp.write(simplejson.dumps(json_data))
            
        # Html render
        elif html_template:
          resp = render_to_response(
            html_template,
            context,
            context_instance=RequestContext(request),
          )
          
        else:
          raise Exception('No template found')
        
      except Exception, e:
        if DEBUG:
          raise
        if request.is_ajax():
          json_data = {'status' : 'error', 'message' : str(e)}
          resp = HttpResponse(mimetype='application/json')
          resp.write(simplejson.dumps(json_data))
        else:
          resp = render_to_response(
            'error.html',
            {'error' : str(e),},
          )
예제 #25
0
파일: forms.py 프로젝트: devhub/baph
 def save(self, domain_override=None,
          subject_template_name='registration/password_reset_subject.txt',
          email_template_name='registration/password_reset_email.html',
          use_https=False, token_generator=default_token_generator,
          from_email=None, request=None):
     '''Generates a one-use only link for resetting password and sends to
     the user.
     '''
     from django.core.mail import send_mail
     for user in self.users_cache:
         if not user.has_usable_password():
             continue
         if not domain_override:
             org = Organization.get_current()
             if isinstance(org, dict):
                 site_name = org['name']
                 domain = org['host']
             else:
                 site_name = org.name
                 domain = org.host
         else:
             site_name = domain = domain_override
         site_name =None
         c = {
             'email': user.email,
             'domain': domain,
             'site_name': site_name,
             'uid': int_to_base36(user.id),
             'user': user,
             'token': token_generator.make_token(user),
             'protocol': use_https and 'https' or 'http',
         }
         subject = render_to_string(subject_template_name, \
                                    RequestContext(request, c))
         subject = ''.join(subject.splitlines())
         email = render_to_string(email_template_name, \
                                  RequestContext(request, c))
         send_mail(subject, email, from_email, [user.email])
예제 #26
0
def paginate(context, queryset_or_list, request, asvar, per_page=25):
    """{% paginate queryset_or_list from request as foo[ per_page 25] %}"""
    
    from django.template.loader import render_to_string

    context_instance = RequestContext(request)
    paging_context = paginate_func(request, queryset_or_list, per_page)
    paging = mark_safe(render_to_string('paging/pager.html', paging_context, context_instance))

    result = dict(objects=paging_context['paginator'].get('objects', []), paging=paging)
    if asvar:
        context[asvar] = result
        return ''
    return result
예제 #27
0
def mail_admins_template(subject,
                         template,
                         context,
                         fail_silently=False,
                         connection=None,
                         html_template=None):
    """Accepts a subject, template, context, (and optionally fail_silently,
    connection, and html_template), renders the template(s) using the context,
    and mails the admins using the templates and parameters via django.core.mail.mail_admins"""

    # render the message template - or fall back to blank if none given - requires html_template
    if not template and html_template:
        message = ''
    else:
        message = render_to_string(template, context)

    # renders html_template if applicable
    html_message = None
    if html_template:
        html_message = render_to_string(html_template, context)

    # sends the email
    mail_admins(subject, message, fail_silently, connection, html_message)
예제 #28
0
 def render(self, context, template_name="voter/default_rating.html"):
     obj = self.obj.resolve(context)
     obj_type = self.obj_type.resolve(context)
     if self.user: 
         user = self.user.resolve(context)
     else:
         user = None
     rating, rating_class = get_rating(obj)
     context['rating'] = rating
     context['can_vote'] = can_vote(context['request'].user, user, obj.rating)
     context['rating_class'] = rating_class
     context['obj_id'] = obj.id
     context['obj_type'] = obj_type
     
     return render_to_string(template_name, context)
예제 #29
0
 def media_js(self, request):
     locale = self.get_locale_for_request(request)
     try:
         app = self.get_app(request)
     except SocialApp.DoesNotExist:
         raise ImproperlyConfigured("No Facebook app configured: please"
                                    " add a SocialApp using the Django"
                                    " admin")
     fb_login_options = self.get_fb_login_options(request)
     ctx =  {'facebook_app': app,
             'facebook_channel_url':
             request.build_absolute_uri(reverse('facebook_channel')),
             'fb_login_options': mark_safe(json.dumps(fb_login_options)),
             'facebook_jssdk_locale': locale}
     return render_to_string('facebook/fbconnect.html',
                             ctx,
                             RequestContext(request))
예제 #30
0
파일: views.py 프로젝트: ricree/Mafiastats
def buildTeamGraph(team, playerset, teamset):
    if team.id in teamset:
        return
    node = cache.get("mafiastats_team_graph_" + str(team.id))
    teamset.add(team.id)
    players = team.players.all()
    if not node:
        templatePlayers = [(player, player.role_set.filter(game=team.game)) for player in players]
        adj = [{"nodeTo": "p" + str(player.id), "data": {}} for player in team.players.all()]
        node = {
            "id": "t" + str(team.id),
            "name": team.title,
            "data": {"infobox": render_to_string("teamGraphInfo.html", {"team": team, "players": templatePlayers})},
            "adjacencies": adj,
        }
        cache.set("mafiastats_team_graph_" + str(team.id), node, 60 * 30)
    yield node
    for player in players:
        for n in buildPlayerGraph(player, playerset, teamset):
            yield n
예제 #31
0
파일: util.py 프로젝트: ernop/wfmu
def r2s(template, context=None):
    from coffin.shortcuts import render_to_string
    return render_to_string(template, dictionary=context)
예제 #32
0
 def media_js(self, request):
     settings = self.get_settings()
     request_parameters = settings.get('REQUEST_PARAMETERS', {})
     ctx = {'request_parameters': json.dumps(request_parameters)}
     return render_to_string('persona/auth.html', ctx,
                             RequestContext(request))
예제 #33
0
def render_to_string(template, context, request=None):
    if request:
        context_instance = RequestContext(request)
    else:
        context_instance = None
    return loader.render_to_string(template, context, context_instance)
예제 #34
0
파일: modules.py 프로젝트: appost/treeio
def dajaxice_js_import(context):
    "Thin wrapper for dajaxice"
    
    return Markup(coffinshortcuts.render_to_string('dajaxice/dajaxice_js_import.html',
                                                   dajaxice_orig_tag(context)))
예제 #35
0
파일: modules.py 프로젝트: vovkd/treeio
def dajaxice_js_import(context):
    "Thin wrapper for dajaxice"

    return Markup(
        coffinshortcuts.render_to_string('dajaxice/dajaxice_js_import.html',
                                         dajaxice_orig_tag(context)))
예제 #36
0
class Reference(unicode):
    def __new__(cls, string, homonym_order=None):
        instance = unicode.__new__(cls, string)
        instance.homonym_order = homonym_order
        return instance

letter_parts = []
part_entries = []
letter = entries3[0][0].lstrip(u' =')[0].upper()
for wordform, group in itertools.groupby(entries3, lambda x: x[0]):
    lst = list(group)
    if wordform.lstrip(u' =')[0].upper() != letter:
        letter_parts.append((letter, part_entries))
        part_entries = []
        letter = wordform.lstrip(u' =')[0].upper()
    if len(lst) < 2:
        wordform, reference, lexeme = lst[0]
        part_entries.append((reference, lexeme))
    else:
        for i, (wordform, reference, lexeme) in enumerate(lst):
            if reference:
                reference = Reference(reference, homonym_order=i+1)
            else:
                lexeme.homonym_order = i + 1
            part_entries.append((reference, lexeme))
letter_parts.append((letter, part_entries))

xml = render_to_string('indesign/slavdict.xml', {'letter_parts': letter_parts})
sys.stdout.write(xml.encode('utf-8'))
sys.exit(0)
예제 #37
0
def r2s(template, context=None):
    from coffin.shortcuts import render_to_string
    #fake=FakeRequestContext(None, dict_=context)
    from django.conf import settings
    return render_to_string(template, dictionary=context)
예제 #38
0
 def render(self, context):
     return jinja_shortcuts.render_to_string(self.filename, context)
예제 #39
0
파일: jinja.py 프로젝트: WoLpH/coffin
 def render(self, context):
     from coffin import shortcuts
     return shortcuts.render_to_string(self.filename, context)
예제 #40
0
 def paginate(request, queryset_or_list, per_page=25):
     context_instance = RequestContext(request)
     context = paginate_func(request, queryset_or_list, per_page)
     paging = Markup(render_to_string('paging/pager.html', context, context_instance))
     return dict(objects=context['paginator'].get('objects', []), paging=paging)