feat: per-event organizer name + reply-to on ticket emails
Some checks failed
lint.yml / feat: per-event organizer name + reply-to on ticket emails (pull_request) Failing after 0s

Each organizer is different, so the sender identity of ticket emails is
now per event rather than per instance:

- `extra.organizer_name` → From display name "Organizer via <site title>"
  (site title alone when unset). The From address stays the instance
  mailbox — that is what DKIM signs — so this costs nothing in mail auth.
- `extra.reply_to_email` → Reply-To; blank falls back to the email on the
  LNbits account that owns the event wallet; no header when neither
  exists. When a reply-to exists the body says "Questions? Reply to this
  email and it reaches <organizer>", and "Organizer: <name>" is listed
  with the ticket details.

Both fields sit next to the existing per-event subject/body in the admin
dialog. The organizer's own wording (in whatever language) remains
`notification_body`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYwoAkZZmXMMmaBp4WGUBo
This commit is contained in:
Padreug 2026-09-09 12:34:19 +02:00
commit 72b9c540f7
7 changed files with 193 additions and 25 deletions

View file

@ -206,6 +206,8 @@ window.PageEvents = {
extra: {
payment_methods: ['lightning'],
promo_codes: [],
organizer_name: '',
reply_to_email: '',
notification_subject: '',
notification_body: ''
}
@ -582,6 +584,8 @@ window.PageEvents = {
email_notifications: false,
nostr_notifications: false,
promo_codes: [],
organizer_name: '',
reply_to_email: '',
notification_subject: '',
notification_body: ''
}
@ -602,6 +606,8 @@ window.PageEvents = {
email_notifications: false,
nostr_notifications: false,
promo_codes: [],
organizer_name: '',
reply_to_email: '',
notification_subject: '',
notification_body: ''
}

View file

@ -823,6 +823,28 @@
label="Ticket notification body"
hint="Shown before the ticket link in the paid ticket notification."
></q-input>
<div class="row q-col-gutter-md">
<div class="col-12 col-md-6">
<q-input
filled
dense
v-model.trim="formDialog.data.extra.organizer_name"
type="text"
label="Organizer name (email sender)"
hint="Shown as 'Name via <site>' in the From line of ticket emails."
></q-input>
</div>
<div class="col-12 col-md-6">
<q-input
filled
dense
v-model.trim="formDialog.data.extra.reply_to_email"
type="email"
label="Reply-to email"
hint="Where attendee replies go. Blank = your account email."
></q-input>
</div>
</div>
<div class="row q-mt-lg">
<q-btn