feat: per-event organizer name + reply-to on ticket emails #44

Closed
padreug wants to merge 1 commit from feat/organizer-sender-identity into main
Owner

Follow-up to the deliverability work (#42, #43): a human sender identity for ticket emails, per event, since every organizer will be different.

  • 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 mail auth is untouched.
  • 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. With a reply-to present, the body ends with "Questions? Reply to this email and it reaches ", and "Organizer: " joins the ticket details.
  • The organizer's own wording (any language) stays in the existing per-event notification_body; nothing is hard-coded in French.
  • Admin dialog: two inputs under the subject/body fields. Webapp counterpart: aiolabs/webapp feat/events-organizer-sender.

41 tests pass (sender-name composition, RFC 2047 decoding of the accented name, Reply-To presence/absence, blank reply-to → None); black / ruff / prettier clean. config.json → 1.6.1-aio.11.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EYwoAkZZmXMMmaBp4WGUBo

Follow-up to the deliverability work (#42, #43): a human sender identity for ticket emails, **per event**, since every organizer will be different. - `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 mail auth is untouched. - `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. With a reply-to present, the body ends with "Questions? Reply to this email and it reaches <organizer>", and "Organizer: <name>" joins the ticket details. - The organizer's own wording (any language) stays in the existing per-event `notification_body`; nothing is hard-coded in French. - Admin dialog: two inputs under the subject/body fields. Webapp counterpart: aiolabs/webapp `feat/events-organizer-sender`. 41 tests pass (sender-name composition, RFC 2047 decoding of the accented name, Reply-To presence/absence, blank reply-to → None); black / ruff / prettier clean. `config.json` → `1.6.1-aio.11`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01EYwoAkZZmXMMmaBp4WGUBo
feat: per-event organizer name + reply-to on ticket emails (1.6.1-aio.11)
Some checks failed
lint.yml / feat: per-event organizer name + reply-to on ticket emails (1.6.1-aio.11) (pull_request) Failing after 0s
0e15f74834
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
padreug force-pushed feat/organizer-sender-identity from 0e15f74834
Some checks failed
lint.yml / feat: per-event organizer name + reply-to on ticket emails (1.6.1-aio.11) (pull_request) Failing after 0s
to 3d47862181
Some checks failed
lint.yml / feat: per-event organizer name + reply-to on ticket emails (1.6.1-aio.14) (pull_request) Failing after 0s
2026-09-13 15:39:42 +00:00
Compare
Author
Owner

Rebased onto main (now at f835766, aio.13 admin-form parity) and re-versioned to 1.6.1-aio.14 — only config.json conflicted. Diff otherwise unchanged; 41 tests still pass. #47 (Email-sent column + copy-to-organizer) is stacked on this branch, so merge this one first.

Rebased onto `main` (now at `f835766`, aio.13 admin-form parity) and re-versioned to **1.6.1-aio.14** — only `config.json` conflicted. Diff otherwise unchanged; 41 tests still pass. #47 (Email-sent column + copy-to-organizer) is stacked on this branch, so merge this one first.
padreug force-pushed feat/organizer-sender-identity from 3d47862181
Some checks failed
lint.yml / feat: per-event organizer name + reply-to on ticket emails (1.6.1-aio.14) (pull_request) Failing after 0s
to 72b9c540f7
Some checks failed
lint.yml / feat: per-event organizer name + reply-to on ticket emails (pull_request) Failing after 0s
2026-09-13 16:19:38 +00:00
Compare
padreug changed title from feat: per-event organizer name + reply-to on ticket emails (v1.6.1-aio.11) to feat: per-event organizer name + reply-to on ticket emails 2026-09-13 16:20:08 +00:00
Author
Owner

Closing without merge: deferred to keep the production run simple (user decision 2026-09-13). Branch feat/organizer-sender-identity stays on origin; tracked in the "per-event sender identity" follow-up issue, including the open question of using the account email only.

Closing without merge: deferred to keep the production run simple (user decision 2026-09-13). Branch `feat/organizer-sender-identity` stays on origin; tracked in the "per-event sender identity" follow-up issue, including the open question of using the account email only.
padreug closed this pull request 2026-09-13 16:40:27 +00:00
Some checks failed
lint.yml / feat: per-event organizer name + reply-to on ticket emails (pull_request) Failing after 0s

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
aiolabs/events!44
No description provided.