diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py
index ddf9b65812..72ea09ac98 100644
--- a/src/pretix/base/settings.py
+++ b/src/pretix/base/settings.py
@@ -346,6 +346,16 @@ your order {code} for {event} has been canceled.
You can view the details of your order at
{url}
+Best regards,
+Your {event} team"""))
+ },
+ 'mail_text_order_custom_mail': {
+ 'type': LazyI18nString,
+ 'default': LazyI18nString.from_gettext(ugettext_noop("""Hello,
+
+You can change your order details and view the status of your order at
+{url}
+
Best regards,
Your {event} team"""))
},
diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py
index 7d2a83329c..6734e6fd71 100644
--- a/src/pretix/control/forms/event.py
+++ b/src/pretix/control/forms/event.py
@@ -614,6 +614,15 @@ class MailSettingsForm(SettingsForm):
help_text=_("Available placeholders: {event}, {code}, {url}"),
validators=[PlaceholderValidator(['{event}', '{code}', '{url}'])]
)
+ mail_text_order_custom_mail = I18nFormField(
+ label=_("Text"),
+ required=False,
+ widget=I18nTextarea,
+ help_text=_("Available placeholders: {expire_date}, {event}, {code}, {date}, {url}, "
+ "{invoice_name}, {invoice_company}"),
+ validators=[PlaceholderValidator(['{expire_date}', '{event}', '{code}', '{date}', '{url}',
+ '{invoice_name}', '{invoice_company}'])]
+ )
smtp_use_custom = forms.BooleanField(
label=_("Use custom SMTP server"),
help_text=_("All mail related to your event will be sent over the smtp server specified by you."),
diff --git a/src/pretix/control/forms/orders.py b/src/pretix/control/forms/orders.py
index bb570b838c..d90d561211 100644
--- a/src/pretix/control/forms/orders.py
+++ b/src/pretix/control/forms/orders.py
@@ -6,7 +6,7 @@ from django.utils.formats import localize
from django.utils.timezone import now
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
-from pretix.base.forms import I18nModelForm
+from pretix.base.forms import I18nModelForm, PlaceholderValidator
from pretix.base.models import Item, ItemAddOn, Order, OrderPosition
from pretix.base.models.event import SubEvent
from pretix.base.services.pricing import get_price
@@ -215,3 +215,30 @@ class OrderLocaleForm(forms.ModelForm):
super().__init__(*args, **kwargs)
locale_names = dict(settings.LANGUAGES)
self.fields['locale'].choices = [(a, locale_names[a]) for a in self.instance.event.settings.locales]
+
+
+class OrderMailForm(forms.Form):
+ subject = forms.CharField(
+ label=_("Subject"),
+ required=True
+ )
+
+ def __init__(self, *args, **kwargs):
+ order = kwargs.pop('order')
+ super().__init__(*args, **kwargs)
+ self.fields['sendto'] = forms.EmailField(
+ label=_("Recipient"),
+ required=True,
+ initial=order.email
+ )
+ self.fields['sendto'].widget.attrs['readonly'] = 'readonly'
+ self.fields['message'] = forms.CharField(
+ label=_("Message"),
+ required=True,
+ widget=forms.Textarea,
+ initial=order.event.settings.mail_text_order_custom_mail.localize(order.locale),
+ help_text=_("Available placeholders: {expire_date}, {event}, {code}, {date}, {url}, "
+ "{invoice_name}, {invoice_company}"),
+ validators=[PlaceholderValidator(['{expire_date}', '{event}', '{code}', '{date}', '{url}',
+ '{invoice_name}', '{invoice_company}'])]
+ )
diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py
index 51ceb0553b..2a26107ed9 100644
--- a/src/pretix/control/logdisplay.py
+++ b/src/pretix/control/logdisplay.py
@@ -107,6 +107,7 @@ def pretixcontrol_logentry_display(sender: Event, logentry: LogEntry, **kwargs):
'pretix.event.order.payment.changed': _('The payment method has been changed.'),
'pretix.event.order.expire_warning_sent': _('An email has been sent with a warning that the order is about '
'to expire.'),
+ 'pretix.event.order.mail_sent': _('A custom email has been sent.'),
'pretix.user.settings.2fa.enabled': _('Two-factor authentication has been enabled.'),
'pretix.user.settings.2fa.disabled': _('Two-factor authentication has been disabled.'),
'pretix.user.settings.2fa.regenemergency': _('Your two-factor emergency codes have been regenerated.'),
diff --git a/src/pretix/control/templates/pretixcontrol/event/mail.html b/src/pretix/control/templates/pretixcontrol/event/mail.html
index 30db5ae0c9..6966f09f84 100644
--- a/src/pretix/control/templates/pretixcontrol/event/mail.html
+++ b/src/pretix/control/templates/pretixcontrol/event/mail.html
@@ -39,6 +39,9 @@
{% blocktrans asvar title_order_canceled %}Order canceled{% endblocktrans %}
{% include "pretixcontrol/event/mail_settings_fragment.html" with pid="order_canceled" title=title_order_canceled items="mail_text_order_canceled" %}
+ {% blocktrans asvar title_order_custom_mail %}Order custom mail{% endblocktrans %}
+ {% include "pretixcontrol/event/mail_settings_fragment.html" with pid="custom_mail" title=title_order_custom_mail items="mail_text_order_custom_mail" %}
+