Exemple #1
0
    def send_mail(self,
                  subject: str,
                  template: Union[str, LazyI18nString],
                  context: Dict[str, Any] = None,
                  log_entry_type: str = 'pretix.event.order.email.sent',
                  user: User = None,
                  headers: dict = None,
                  sender: str = None,
                  invoices: list = None):
        """
        Sends an email to the user that placed this order. Basically, this method does two things:

        * Call ``pretix.base.services.mail.mail`` with useful values for the ``event``, ``locale``, ``recipient`` and
          ``order`` parameters.

        * Create a ``LogEntry`` with the email contents.

        :param subject: Subject of the email
        :param template: LazyI18nString or template filename, see ``pretix.base.services.mail.mail`` for more details
        :param context: Dictionary to use for rendering the template
        :param log_entry_type: Key to be used for the log entry
        :param user: Administrative user who triggered this mail to be sent
        :param headers: Dictionary with additional mail headers
        :param sender: Custom email sender.
        """
        from pretix.base.services.mail import SendMailException, mail, render_mail

        if not self.email:
            return

        with language(self.locale):
            recipient = self.email
            try:
                email_content = render_mail(template, context)[0]
                mail(recipient,
                     subject,
                     template,
                     context,
                     self.event,
                     self.locale,
                     self,
                     headers,
                     sender,
                     invoices=invoices)
            except SendMailException:
                raise
            else:
                self.log_action(log_entry_type,
                                user=user,
                                data={
                                    'subject':
                                    subject,
                                    'message':
                                    email_content,
                                    'recipient':
                                    recipient,
                                    'invoices':
                                    [i.pk
                                     for i in invoices] if invoices else []
                                })
Exemple #2
0
def twilio_order_message(order, template_name):
    from .tasks import twilio_send

    recipient = order.phone
    if not order.phone:
        return

    context = get_email_context(event=order.event, order=order)
    for k, v in order.event.meta_data.items():
        context["meta_" + k] = v

    with language(order.locale, order.event.settings.region):
        template = order.event.settings.get(f"twilio_text_{template_name}")
        if not str(template):
            return

        try:
            content = render_mail(template, context)
            twilio_send(text=content, to=str(recipient), event=order.event_id)
        except Exception:
            raise
        else:
            order.log_action(
                "pretix_twilio.message.sent",
                data={
                    "message": content,
                    "recipient": str(recipient),
                },
            )
Exemple #3
0
 def form_valid(self, form):
     tz = pytz.timezone(self.request.event.settings.timezone)
     order = Order.objects.get(event=self.request.event,
                               code=self.kwargs['code'].upper())
     self.preview_output = {}
     try:
         invoice_name = order.invoice_address.name
         invoice_company = order.invoice_address.company
     except InvoiceAddress.DoesNotExist:
         invoice_name = ""
         invoice_company = ""
     with language(order.locale):
         email_context = {
             'event':
             order.event,
             'code':
             order.code,
             'date':
             date_format(order.datetime.astimezone(tz),
                         'SHORT_DATETIME_FORMAT'),
             'expire_date':
             date_format(order.expires, 'SHORT_DATE_FORMAT'),
             'url':
             build_absolute_uri(order.event,
                                'presale:event.order',
                                kwargs={
                                    'order': order.code,
                                    'secret': order.secret
                                }),
             'invoice_name':
             invoice_name,
             'invoice_company':
             invoice_company,
         }
     email_template = LazyI18nString(form.cleaned_data['message'])
     email_content = render_mail(email_template, email_context)[0]
     if self.request.POST.get('action') == 'preview':
         self.preview_output = []
         self.preview_output.append(
             _('Subject: {subject}').format(
                 subject=form.cleaned_data['subject']))
         self.preview_output.append(email_content)
         return self.get(self.request, *self.args, **self.kwargs)
     else:
         try:
             order.send_mail(form.cleaned_data['subject'], email_template,
                             email_context,
                             'pretix.event.order.email.custom_sent',
                             self.request.user)
             messages.success(
                 self.request,
                 _('Your message has been queued and will be sent to {}.'.
                   format(order.email)))
         except SendMailException:
             messages.error(
                 self.request,
                 _('Failed to send mail to the following user: {}'.format(
                     order.email)))
         return super(OrderSendMail, self).form_valid(form)