feat: "Email sent" column and per-event copy-to-organizer BCC

Organizers had no way to see whether a ticket email went out short of
reading the Postfix journal, and no copy of what the attendee received —
LNbits submits over SMTP, so nothing lands in a Sent folder.

- Admin ticket table gains an "Email sent" column derived from
  `extra.email_notification_sent` ("✓ sent" / "not sent" / "unpaid" /
  "no email").
- `extra.copy_to_organizer`: BCC every ticket email to the event's
  reply-to address (explicit, else the owner's account email) on the SMTP
  envelope only — no Bcc/To header, and skipped when the buyer *is* that
  address. Toggle sits with the other delivery switches in the admin form.

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-13 17:40:49 +02:00
commit a44de1aa3f
5 changed files with 73 additions and 1 deletions

View file

@ -133,6 +133,19 @@ window.PageEvents = {
{name: 'event', align: 'left', label: 'Event', field: 'event'},
{name: 'name', align: 'left', label: 'Name', field: 'name'},
{name: 'email', align: 'left', label: 'Email', field: 'email'},
{
name: 'email_sent',
align: 'left',
label: 'Email sent',
field: row =>
!row.email
? 'no email'
: row.extra?.email_notification_sent
? '\u2713 sent'
: row.paid
? 'not sent'
: 'unpaid'
},
{
name: 'registered',
align: 'left',
@ -207,6 +220,7 @@ window.PageEvents = {
payment_methods: ['lightning'],
promo_codes: [],
organizer_name: '',
copy_to_organizer: false,
reply_to_email: '',
notification_subject: '',
notification_body: ''
@ -585,6 +599,7 @@ window.PageEvents = {
nostr_notifications: false,
promo_codes: [],
organizer_name: '',
copy_to_organizer: false,
reply_to_email: '',
notification_subject: '',
notification_body: ''
@ -607,6 +622,7 @@ window.PageEvents = {
nostr_notifications: false,
promo_codes: [],
organizer_name: '',
copy_to_organizer: false,
reply_to_email: '',
notification_subject: '',
notification_body: ''