mirror of
https://github.com/pretix/pretix.git
synced 2026-05-06 15:24:02 +00:00
Catch and display mail sending errors (#215)
This commit is contained in:
committed by
Raphael Michel
parent
fe4946d591
commit
3c8f9f5a62
@@ -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 '
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user