Catch and display mail sending errors (#215)

This commit is contained in:
Tobias Kunze
2016-08-30 16:49:52 +02:00
committed by Raphael Michel
parent fe4946d591
commit 3c8f9f5a62
10 changed files with 75 additions and 34 deletions

View File

@@ -15,6 +15,7 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView
from pretix.base.models import Order, Quota
from pretix.base.services.mail import SendMailException
from pretix.base.services.orders import mark_order_paid
from pretix.base.settings import SettingsSandbox
from pretix.control.permissions import EventPermissionRequiredMixin
@@ -54,6 +55,7 @@ class ImportView(EventPermissionRequiredMixin, TemplateView):
orders = Order.objects.filter(event=self.request.event,
code__in=self.request.POST.getlist('mark_paid'))
some_failed = False
mail_failures = False
for order in orders:
try:
mark_order_paid(order, provider='banktransfer', info=json.dumps({
@@ -64,6 +66,8 @@ class ImportView(EventPermissionRequiredMixin, TemplateView):
}))
except Quota.QuotaExceededException:
some_failed = True
except SendMailException:
mail_failures = True
if some_failed:
messages.warning(self.request, _('Not all of the selected orders could be marked as '
@@ -72,6 +76,8 @@ class ImportView(EventPermissionRequiredMixin, TemplateView):
else:
messages.success(self.request, _('The selected orders have been marked as paid.'))
# TODO: Display a list of them!
if mail_failures:
messages.warning(self.request, _('Some confirmation mails could not be sent.'))
return self.redirect_back()
messages.error(self.request, _('We were unable to detect the file type of this import. Please '

View File

@@ -10,6 +10,7 @@ from django.utils.translation import ugettext as __, ugettext_lazy as _
from pretix.base.models import Quota
from pretix.base.payment import BasePaymentProvider
from pretix.base.services.mail import SendMailException
from pretix.base.services.orders import mark_order_paid, mark_order_refunded
from pretix.multidomain.urlreverse import build_absolute_uri
@@ -182,6 +183,8 @@ class Paypal(BasePaymentProvider):
mark_order_paid(order, 'paypal', json.dumps(payment.to_dict()))
except Quota.QuotaExceededException as e:
messages.error(request, str(e))
except SendMailException:
messages.warning(request, _('There was an error sending the confirmation mail.'))
return None
def order_pending_render(self, request, order) -> str:

View File

@@ -8,7 +8,7 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView
from pretix.base.models import Order
from pretix.base.services.mail import mail
from pretix.base.services.mail import SendMailException, mail
from pretix.control.permissions import EventPermissionRequiredMixin
from . import forms
@@ -36,11 +36,18 @@ class SenderView(EventPermissionRequiredMixin, FormView):
self.request.event.log_action('pretix.plugins.sendmail.sent', user=self.request.user, data=dict(
form.cleaned_data))
failures = []
for o in orders:
mail(o.email, form.cleaned_data['subject'], form.cleaned_data['message'],
None, self.request.event, locale=o.locale, order=o)
try:
mail(o.email, form.cleaned_data['subject'], form.cleaned_data['message'],
None, self.request.event, locale=o.locale, order=o)
except SendMailException:
failures.append(o.email)
messages.success(self.request, _('Your message will be sent to the selected users.'))
if failures:
messages.error(self.request, _('Failed to send mails to the following users: {}'.format(' '.join(failures))))
else:
messages.success(self.request, _('Your message has been queued to be sent to the selected users.'))
return redirect(
'plugins:sendmail:send',

View File

@@ -10,6 +10,7 @@ from django.utils.translation import ugettext_lazy as _
from pretix.base.models import Quota
from pretix.base.payment import BasePaymentProvider
from pretix.base.services.mail import SendMailException
from pretix.base.services.orders import mark_order_paid, mark_order_refunded
from pretix.multidomain.urlreverse import build_absolute_uri
@@ -116,6 +117,9 @@ class Stripe(BasePaymentProvider):
mark_order_paid(order, 'stripe', str(charge))
except Quota.QuotaExceededException as e:
messages.error(request, str(e))
except SendMailException:
messages.warning(request, _('There was an error sending the confirmation mail.'))
else:
messages.warning(request, _('Stripe reported an error: %s' % charge.failure_message))
logger.info('Charge failed: %s' % str(charge))